获取错误JSONException:没有值

时间:2013-04-24 16:02:36

标签: android json

我有一个json解析代码的问题它显示错误json没有konteks lokasi的值,这是使用TAG_KONTEKS变量。 这是我获取json响应的代码。

@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
    }
]

}

如果你能帮助我,我会很高兴...

1 个答案:

答案 0 :(得分: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);
}