1

json 解析コードに問題があり、TAG_KONTEKS 変数を使用する konteks lokasi のエラー json no value が表示されます。これは、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
    }
]

}

お役に立てればとても嬉しいです...

4

1 に答える 1

1

経度と緯度は引用符で囲まれているため、文字列です。したがって、 getString() で取得する必要があります

このようにそれらを解析します

JSONArray には別の json Array が含まれているため、このように解析します

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);
}
于 2013-04-24T16:08:37.630 に答える