0

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();

...それで...???

4

0 に答える 0