0

Java スイング アプリケーションを作成しようとしていて、Android 用に作成したクラスを使用しようとしています。NULL ポインター例外が発生しているため、http 投稿の実行に問題があります。

private static String httpPost(ArrayList<NameValuePair> constraints, URI uri)
        throws ClientProtocolException, IOException {

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(uri);
    try {
        httppost.setEntity(new UrlEncodedFormEntity(constraints));
    } catch (UnsupportedEncodingException e) {
        throw (new IllegalArgumentException("Constraints: "
                + constraints.toString()));
    }

    HttpResponse response = httpclient.execute(httppost);

    return isToString(response.getEntity().getContent());
}

スタックトレース:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.apache.http.entity.StringEntity.<init>(StringEntity.java:70)
at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:78)
at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:92)
at connection.Server.httpPost(Server.java:130)
    ...

Android では、org.apache.* パッケージが android-8.jar に含まれています。ここからダウンロードしたライブラリ(HttpCore 4.2.1)では機能しません。

NullPointerException は、次の呼び出しでスローされますnew UrlEncodedFormEntity(constraints)。デバッガーを使用してパラメーターを確認しましたが、constraints完全に問題なく、含まれているはずのものが含まれています。

私は何か間違ったことをしていますか?libに問題があるように思えます。サイトで以前のバージョンを探していましたが、そこにはないようです。

編集:ソースをダウンロードして、例外がスローされている場所を正確に確認することが思いつきました(70行目):

org.apache.http.entity.StringEntity

68:  Charset charset = contentType != null ? contentType.getCharset() : null;
69:  if (charset == null) {
70:      charset = HTTP.DEF_CONTENT_CHARSET;
80:  }
4

2 に答える 2

1

ライブラリをダウンロードしたのはいつですか?この投稿を見たことがありますか?提案は、後のビルドで対処された回帰であったということです。

あなたの編集を考えると、あなたが持っているバイナリとダウンロードしたソースが同期していないと思います。バイナリを再ダウンロードし、それらを使用してアプリケーションを実行することをお勧めします。

于 2012-06-26T21:09:01.537 に答える
1

HttpClient 4.2.1 の org.apache.http.entity.StringEntity クラスで StringEntity が壊れているようです。この問題には Charset が関係しているようです。パッチは http://dvdsdirect.us/notesstringentity.jspで入手できます。

于 2012-07-06T14:58:48.037 に答える