2013-02-01 108 views
2

我想发布json对象,然后尝试接收json对象。通过嗅探器显示该帖子并获得成功作品。但接收对象始终为空。 我认为这是因为我的粗心大意,所以我希望你能帮助我。NullPointerException当返回json对象

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

,这里是活动的一部分,在那里我一直在行JSONObject jsonObjRecv = JSONPost.SendHttpPost(URL, jsonObjSend);得到NullPointerException异常错误:

// 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 

谢谢您的答复。

+0

过去乌尔JSON响应异常 – MuraliGanesan

+0

你可以指出哪些是OtherActivity.java 47行 –

+0

@DavidM返回null,47行是:jsonObjRecv.getJSONObject( “ID”); –

回答

2

YOu在JSONPost.SendHttpPost中收到异常,导致它返回null。这意味着当您尝试对结果调用getJSONObject时,会得到空指针异常。它看起来像你试图通过SendHttpPost函数在onCreate中执行HTTP请求。这是不允许的 - 你不能在UI线程上执行网络IO,它会抛出异常。您需要在线程或AsyncTask中执行此操作。

+0

但是,当我改变线成字符串jsonObjRecv = JSONPost.SendHttpPost(URL,jsonObjSend);我可以接收它,但作为String对象。 –

0

检查此library了。它可以轻松帮助您获取和解析正确的JSON响应。具体而言,对于JSON请求,它具有非常整齐的JsonHttpResponseHandler

0

HttpEntity entity = response.getEntity();'

这是返回您的任何数据?在使用响应对象之前,在那里放置一个空检查 还您sendhttppost

+0

是的,它会返回... –