2013-04-10 155 views
1

我想從webservices解析json,但我得到了空指針異常。但是如果我在瀏覽器中點擊url,那麼我得到的結果,但在代碼中它返回null。解析JSON時獲取NullPointer異常

這裏是我的網址: - http://www.expensekeeper.in/webservice/FetchBillCall.php?userid=7

這裏是我的代碼: -

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  
    new LongOperation().execute(""); 

} 

private class LongOperation extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... params) { 
     String url = "http://www.expensekeeper.in/webservice/FetchBillCall.php?userid=7"; 
     JSONParser jsonParser = new JSONParser(); 
     JSONObject jsonObject = jsonParser.getJSONFromUrl(url); 
     try { 
      //JSONArray jsonArray = jsonObject.getJSONArray(""); 
      dueDate = jsonObject.getString("duedate"); 
      description = jsonObject.getString("description"); 
      status = jsonObject.getString("status"); 
      remarks = jsonObject.getString("remarks"); 
     } catch (JSONException e) { 
     e.printStackTrace(); 
     } 
      return "Executed"; 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(MainActivity.this, dueDate+description+status+remarks, Toast.LENGTH_LONG).show(); 
    } 

    } 

這裏是我jsonParser類: -

public JSONObject getJSONFromUrl(String str) { 

    HttpURLConnection conn = null; 
    StringBuilder jsonResults = new StringBuilder(); 
    try { 
     URL url = new URL(str); 
     conn = (HttpURLConnection) url.openConnection(); 
     InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

     // Load the results into a StringBuilder 
     int read; 
     char[] buff = new char[1024]; 
     while ((read = in.read(buff)) != -1) { 
      jsonResults.append(buff, 0, read); 
     } 
     json = jsonResults.toString(); 
    } catch (MalformedURLException e) { 
     Log.e(LOG_TAG, "Error processing Places API URL", e); 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "Error connecting to Places API", e); 
    } finally { 
     if (conn != null) { 
      conn.disconnect(); 
     } 
    } 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 
    return jObj; 

} 

這裏是我的堆棧跟蹤: -

04-10 17:15:16.425: E/AndroidRuntime(1388): Caused by: java.lang.NullPointerException 
04-10 17:15:16.425: E/AndroidRuntime(1388):  at com.example.jsonsample.MainActivity$LongOperation.doInBackground(MainActivity.java:40) 
04-10 17:15:16.425: E/AndroidRuntime(1388):  at com.example.jsonsample.MainActivity$LongOperation.doInBackground(MainActivity.java:1) 

我不明白我的代碼出了什麼問題。爲什麼我從服務器獲得空值。
請給我任何參考。
在此先感謝

+0

哪裏'(MainActivity .java:40)'指向?對'dueDate = jsonObject.getString(「duedate」);'的 – asloob 2013-04-10 17:20:11

+0

。 – 2013-04-10 17:22:53

回答

2

編輯:從JSONObject通過getJSONFromUrl(String str)回到JSONArray

更改類型。

然後直接這樣

JSONArray array=new JSONArray(json); // JSON創建JSONArray是您的JSON字符串在getJSONFromUrl(String str)方法

返回數組


根據您的服務返回JSONArray

上面的響應,你的服務返回JSONArray,而不是JSONObject,所以它也會拋出JSONExc eption,當您嘗試將JSONArray轉換爲JSONObject時。

JSONObject jsonObject = jsonParser.getJSONFromUrl(url); 

因此,這將返回NULL,

爲您的JSONObject是null和你正試圖在這裏

dueDate = jsonObject.getString("duedate"); 

訪問它,你會得到NullPointerException

+0

你可以提供給我如何讀取陣列沒有任何名稱...因爲我的數組沒有任何名稱....你打這個url ... – 2013-04-10 17:28:42

+0

你可以直接創建JSONArray的字符串,像這樣'JSONArray array = new JSONObject(jsonstring);'並返回JSON解析器中的JSONArray – Pragnani 2013-04-10 17:30:02

+0

@SandipArmalPatil檢查我的編輯 – Pragnani 2013-04-10 17:34:09