Siddhpura Amit
Siddhpura Amit

Reputation: 15078

Fetch json from url giving NullPointerException

I am fetching URL from below URL but i got following error

 url = "http://qrpromenad.azurewebsites.net/api/question?id=1&imei=35404304";


    public JSONObject getJSONFromUrl(String url) {
    System.out.println(url);
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();  // here i got null value

    } catch (Exception e) {
        e.printStackTrace();
    }

The following is logcat error

       04-17 16:00:12.739: W/System.err(4579): java.lang.NullPointerException
       04-17 16:00:12.739: W/System.err(4579):  at         com.qrcodetest.JSONParser.getJSONFromUrl(JSONParser.java:40)
       04-17 16:00:12.739: W/System.err(4579):  at com.qrcodetest.Result$FetchURL.doInBackground(Result.java:50)
       04-17 16:00:12.739: W/System.err(4579):  at com.qrcodetest.Result$FetchURL.doInBackground(Result.java:1)
       04-17 16:00:12.739: W/System.err(4579):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
       04-17 16:00:12.739: W/System.err(4579):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
       04-17 16:00:12.739: W/System.err(4579):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
       04-17 16:00:12.739: W/System.err(4579):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
       04-17 16:00:12.739: W/System.err(4579):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
       04-17 16:00:12.739: W/System.err(4579):  at java.lang.Thread.run(Thread.java:1019)

but if i use another url like http://api.androidhive.info/contacts/ it is working fine

i have used POST method but still NULL is returning

     DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(Const.POST_URL);
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "1"));
        nameValuePairs.add(new BasicNameValuePair("imei", "123456"));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));


        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        System.out.println("httpEntity "+httpEntity); // here is null
        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// false
            is = httpEntity.getContent();
        } 

Upvotes: 0

Views: 207

Answers (1)

Perception
Perception

Reputation: 80603

The URL in question does not support posts (you can test that yourself with any kind of REST client). But, as you yourself have indicated, it does work with GET's. So switch up your code to something like as shown below and problem solved:

final String url = "http://qrpromenad.azurewebsites.net/api/question?id=1&imei=35404304";

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(get);

String responseData = null;
final int status = httpResponse.getStatusLine().getStatusCode();
if (status == HttpStatus.SC_OK) {
    responseData = EntityUtils.toString(httpResponse.getEntity());
} else {
    System.err.println("HTTP request failed with status " + status);
}

System.out.println(responseData);

You need to add back in (of course) some more advanced error handling

Upvotes: 1

Related Questions