StringEntity と追加されたクエリ パラメータの両方を含む httpclient の実行が許可されていないのか、それともこのコードに何か根本的な問題があるのか 、それが何をしているのかについての私の仮定があるのか わかりません。
そういうわけで、これは私がやるべきだと思うこと/私がやろうとしていることです:
メソッドに渡されたパラメーターを URL 内の args にアタッチします。IOW、serNum、siteNum は次のような URL になります。
http://10.0.2.2:28642.api/DeliveryItems/PostArgsAndXMLFileAsStr?serNum=Bla&siteNum=Bla
ただし、URL 内ではなく、httppost の本文内で渡したい大きな引数があります。この (stringifiedXML) StringEntity 内に隠そうとしています。
コンテキストのメソッド全体は次のとおりです。
プライベート クラス PostDeliveryItemTask は AsyncTask を拡張します {
@Override
protected String doInBackground(String... params) {
String result = "";
String stringifiedXML = params[0];
String serNum = params[1];
String siteNum = params[2];
Uri.Builder builder = new Uri.Builder();
builder.scheme("http").authority("10.0.2.2:28642").appendPath("api").appendPath("DeliveryItems").appendPath("PostArgsAndXMLFileAsStr").
appendQueryParameter("serialNum", serNum).appendQueryParameter("siteNum", siteNum);
String URLToCall = builder.build().toString();
try {
StringEntity se = new StringEntity(stringifiedXML);
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URLToCall);
httppost.setEntity(se);
HttpResponse response = httpclient.execute(httppost); // <= goes pear-shaped
result = response.toString();
} catch (ClientProtocolException e) {
Log.e("ClientProtocolException", e.toString());
} catch (UnsupportedEncodingException uex) {
Log.e("UnsupportedEncodingException", uex.toString());
} catch (IOException iox) {
Log.e("IOException", iox.toString());
}
if (null != result) return result;
}
この行に到達するまで、すべてがうまくいくようです:
HttpResponse response = httpclient.execute(httppost);
...ゴムが実際にシリコンと出会う場所。その時点で-ワモ!バスカヴィル・ハウンドのように霧の中に消えていきます。URL args と StringEntity が混在して一致しているためですか? または???「setEntity」行は文句を言わないので、私はそれを疑っていますが...何が問題なのでしょうか? LogCat でエラーが発生することはありません。アプリが鳴るだけです。
アップデート
「単純に鳴く」と、AsyncTask.class の次の 2 行の間になります。
public AsyncTask() { /* compiled code */ }
public final android.os.AsyncTask.Status getStatus() { /* compiled code */ }
更新 2
Sartorial Delimiter の提案: "別の HTTP クライアントを使用してみてください。組み込みの HttpURLConnection またはその他のいずれかです。 "
しかし、どのように?
これとともに:
HttpClient httpclient = new HttpURLConnection();
「エラー: HttpURLConnection は抽象的です。インスタンス化できません」というメッセージが表示されます
これとともに:
HttpURLConnection httpclient = new DefaultHttpClient();
...httpclient で使用できる「.execute()」メソッドはありません。同じことが次の場合にも当てはまります。
HttpURLConnection httpclient = new HttpURLConnection();
...それで...???