2013-04-24 37 views
1

我有一個json解析代碼的問題,它顯示錯誤json沒有konteks lokasi值,它使用TAG_KONTEKS變量。 這是我獲取json響應的代碼。獲取errror JSONException:沒有值

@Override 
    protected String doInBackground(String... args) { 
     // TODO Auto-generated method stub 
     //mendapatkan data dari database berupa alamat, konteks, latitude, longitude 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("lat", Integer.toString(latPengguna))); 
     params.add(new BasicNameValuePair("lng", Integer.toString(lngPengguna))); 
     params.add(new BasicNameValuePair("konteks", konteksCocok)); 
     Log.d("lat dan lng kirim", "data: " + Integer.toString(latPengguna) + " " + Integer.toString(lngPengguna)); 
     Log.d("konteks kirim", "data: " + konteksCocok); 
     JSONObject json = jParser.makeHttpRequest(url_webservice, "POST", params); 
     Log.d("data: ", json.toString()); 

     //menampilkan data lokasi POI 
     try { 
      int sukses = json.getInt(TAG_SUCCESS); 
      if(sukses == 1) { 
       POI = json.getJSONArray(TAG_POIN); 
       for(int i = 0; i < POI.length(); i++) { 
        JSONObject c = POI.getJSONObject(i); 
        int latDB = c.getInt(TAG_LAT); 
        int lngDB = c.getInt(TAG_LNG); 
        String alamat = c.getString(TAG_ALAMAT); 
        String konteks = c.getString(TAG_KONTEKS); 

        Log.d("latDB", "data: " + latDB); 
        Log.d("lngDB", "data: " + lngDB); 
        Log.d("altDB", "data: " + alamat); 
        Log.d("ktsDB", "data: " + konteks);      
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TAG_ALAMAT, alamat); 
        map.put(TAG_KONTEKS, konteks); 
        POIList.add(map); 
       } 
      } else { 
       Log.d("JSON error", "JSON trouble"); 
      } 
     } catch(JSONException ex) { 
      ex.printStackTrace(); 
     } 
     return null; 
    } 

這是我的JSON響應:

{ 
"success": 1, 
"point": [ 
    { 
     "point": { 
      "konteks_lokasi": "kuliah", 
      "nama_lokasi": "Teknik Perkapalan", 
      "longitude": "-60", 
      "latitude": "117" 
     }, 
     "hasil": 15.811388300842 
    }, 
    { 
     "point": { 
      "konteks_lokasi": "kuliah", 
      "nama_lokasi": "Teknik Kimia", 
      "longitude": "-80", 
      "latitude": "145" 
     }, 
     "hasil": 33.376638536557 
    }, 
    { 
     "point": { 
      "konteks_lokasi": "kuliah", 
      "nama_lokasi": "Teknik Arsitektur", 
      "longitude": "-22", 
      "latitude": "111" 
     }, 
     "hasil": 53.009433122794 
    } 
] 

}

我將非常高興,如果你能幫助我...

+0

這是什麼TAG_KONTEKS?這個在你的映射器(Tlds等等)中的擴展是什麼? – 2013-04-24 16:12:43

+0

這是一個數據konteks的json響應標籤:private static final String TAG_KONTEKS =「konteks_lokasi」; – 2013-04-24 16:14:22

回答

1

經度和緯度是字符串,因爲它們被引號包圍。所以你應該讓他們的getString()

解析他們這樣

你JSONArray包含另一個JSON數組解析所以像這樣

int sukses = json.getInt(TAG_SUCCESS); 
      if(sukses == 1) { 
       POI = json.getJSONArray(TAG_POIN); 

       for(int i = 0; i < POI .length(); i++) { 
        JSONObject c = POI .getJSONObject(i); 
        JSONObject d = c.getJSONObject(0); 

        String latDB = d.getString(TAG_LAT); 
        String lngDB = d.getString(TAG_LNG); 
        String alamat = d.getString(TAG_ALAMAT); 
        String konteks = d.getString(TAG_KONTEKS); 
} 
+0

感謝您的答案,但它仍然得到相同的錯誤... – 2013-04-24 16:16:00

+0

@IvanAhmed對不起,嘗試我的編輯,應該工作 – Pragnani 2013-04-24 16:22:27

+0

但在c.getJSONObject顯示紅色線條顯示錯誤 JSONObject類型中的getJSONObject(String)方法是不適用於參數(int) – 2013-04-24 16:27:02