Anton Kashpor
Anton Kashpor

Reputation: 1305

NullPointerException while returning json object

I'm trying to post json object, then try to receive json object. Through sniffer it show that post and get successful works. But receiving object is always null. I think it's because of my carelessness, so I hope you help me with it.

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

and here is a part of Activity where I keep getting NullPointerException error at line 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();
    }

When I changed type jsonObjRecv to String it started to work, but I need JSON type for it.

Error:

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

Thank you for your response.

Upvotes: 2

Views: 2946

Answers (3)

user1744361
user1744361

Reputation: 14

HttpEntity entity = response.getEntity();'

is this returning your any data? Place a null check there before using response object. also you return null for an exception in sendhttppost

Upvotes: 0

Ben Max Rubinstein
Ben Max Rubinstein

Reputation: 1813

Check this library out. It will easily assist you in getting and parsing correct JSON responses. Specifically, it has a very neat JsonHttpResponseHandler for JSON requests.

Upvotes: 0

Gabe Sechan
Gabe Sechan

Reputation: 93561

YOu're getting an exception in JSONPost.SendHttpPost, which causes it to return null. This means you get a null pointer exception when you try to call getJSONObject on the result. It looks like you're trying to do an HTTP request in onCreate through the SendHttpPost function. This isn't allowed- you can't do network IO on the UI thread, it throws an exception. You need to do it in a thread or AsyncTask.

Upvotes: 2

Related Questions