2013-04-17 73 views
0

我从以下网址获取URL,但我得到以下错误获取JSON给NullPointerException异常

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

以下是logcat的错误

 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) 

但如果我用另一个URL像http://api.androidhive.info/contacts/它是工作正常

我已经使用POST方法,但仍NULL返回

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

哪条线是40行程式码中加回? – mthmulders

+0

给NPE的线是什么? (即JSONParser类的第40行) –

+0

您是否修改了PHP脚本中的任何内容?检查它是否正确地返回你需要的json响应。 – SKK

回答

1

有问题的URL不支持文章(您可以使用任何种类的REST客户端自己测试)。但是,正如你自己所表明的那样,它的确适用于GET。所以,你的代码切换多达类似如下图所示,问题就解决了:

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

你需要的(当然)一些更高级的错误处理

+0

谢谢soooo多知觉:) –

+0

Np,与项目的其余部分祝好运。 – Perception