2

json オブジェクトを投稿してから、json オブジェクトを受信しようとしています。スニファーを介してその投稿を表示し、成功した作品を取得します。ただし、受信オブジェクトは常に null です。私の不注意によるものだと思いますので、ご協力いただければ幸いです。

    try {
        DefaultHttpClient httpclient = new DefaultHttpClient(ccm, params);
        HttpPost httppostreq = new HttpPost(URL);

        StringEntity se;
        se = new StringEntity(jsonObjSend.toString());
        //se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        se.setContentType("application/json;charset=UTF-8");
        //se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8"));
        httppostreq.setEntity(se);

        //Setting headers
        HttpResponse response = httpclient.execute(httppostreq);

        HttpEntity entity = response.getEntity();

        if (entity != null) {
            InputStream instream = entity.getContent();
            Header contentEncoding = response.getFirstHeader("Content-Encoding");
            if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
                instream = new GZIPInputStream(instream);
            }
            // convert content stream to a String
            String resultString= convertStreamToString(instream);
            instream.close();
            resultString = resultString.substring(1,resultString.length()-1);

            // Transform the String into a JSONObject
            JSONObject jsonObjRecv = new JSONObject(resultString);

            return jsonObjRecv;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;


private static String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

そして、これはアクティビティの一部で、行でNullPointerExceptionエラーが発生し続けますJSONObject jsonObjRecv = JSONPost.SendHttpPost(URL, jsonObjSend);:

// Send the HttpPostRequest and receive a JSONObject in return
JSONObject jsonObjRecv = JSONPost.SendHttpPost(URL, jsonObjSend);
    try {
        jsonObjRecv.getJSONObject("id"); //Here I got the error
    } catch (JSONException e) {
        e.printStackTrace();
    }

タイプ jsonObjRecv を String に変更すると、機能し始めましたが、JSON タイプが必要です。

エラー:

02-01 21:39:01.673: ERROR/AndroidRuntime(20855): FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Phone/com.Phone.MainActivity.OtherActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797)
    at android.app.ActivityThread.access$2300(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:4914)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
    at com.Phone.MainActivity.OtherActivity.onCreate(OtherActivity.java:47)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
    ... 11 more

ご回答ありがとうございます。

4

3 に答える 3

2

JSONPost.SendHttpPostで例外が発生し、nullが返されます。これは、結果に対してgetJSONObjectを呼び出そうとすると、nullポインター例外が発生することを意味します。SendHttpPost関数を介してonCreateでHTTPリクエストを実行しようとしているようです。これは許可されていません。UIスレッドでネットワークIOを実行することはできず、例外がスローされます。スレッドまたはAsyncTaskでそれを行う必要があります。

于 2013-02-01T19:19:02.647 に答える
0

このライブラリをチェックしてください。正しい JSON 応答を取得して解析するのに簡単に役立ちます。具体的には、JSON リクエスト用の非常にきちんとしたJsonHttpResponseHandlerがあります。

于 2013-02-01T19:40:00.127 に答える
0

HttpEntity エンティティ = response.getEntity();'

これはあなたのデータを返していますか?応答オブジェクトを使用する前に、null チェックを配置します。また、sendhttppost の例外に対して null を返します

于 2013-02-01T21:00:34.270 に答える