2013-10-10 61 views
1

我從MySQL數據庫表中獲取緯度和經度的值,其中兩個字段的數據類型是雙精度值,並且在php文件中我將這些值放入數組中發送它們作爲對json的響應。我logcat中顯示這些值正確的,但它也說,谷歌地圖:org.json.JSONArray不能轉換爲json對象

「org.json.JSONArray不能轉換成JSON對象」

,我不能看到我從緯度要在地圖上的結果,很長,但地圖上還有其他地方。這是我的java代碼部分,它從php獲取值。所以我如何處理這種轉換,以獲得這些值,因爲它們來自php,這樣我就可以在數據庫中看到存儲的位置。

JSONObject json_user1 = new JSONObject(responseFromPHP); 

     JSONObject json_user2 = json_user1.getJSONObject("latlong"); 

     double latitude=Double.parseDouble((json_user2.getString(TAG_LATITUDE))); 

     double longitude=Double.parseDouble((json_user2.getString(TAG_LONGITUDE))); 
        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
      Marker Lahore = map.addMarker(new MarkerOptions().position(
        new LatLng(latitude, longitude)) 
       .title("Lahore")); 
     // Move the camera instantly to hamburg with a zoom of 15. 
      map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 5)); 

      // Zoom in, animating the camera. 
      map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 

的logcat: enter image description here

10-10 22:49:47.655: D/Show lat n long:(30670): {"success":1,"latlongs":[{"longitude":"74.3436","latitude":"31.5497"}]} 
10-10 22:49:47.655: W/System.err(30670): org.json.JSONException: Value [{"longitude":"74.3436","latitude":"31.5497"}] at latlongs of type org.json.JSONArray cannot be converted to JSONObject 
10-10 22:49:47.660: W/System.err(30670): at org.json.JSON.typeMismatch(JSON.java:100) 
10-10 22:49:47.660: W/System.err(30670): at org.json.JSONObject.getJSONObject(JSONObject.java:573) 
10-10 22:49:47.660: W/System.err(30670): at com.DRMS.disas_recovery.MainActivity$LoadMap.onPostExecute(MainActivity.java:80) 
10-10 22:49:47.660: W/System.err(30670): at com.DRMS.disas_recovery.MainActivity$LoadMap.onPostExecute(MainActivity.java:1) 
10-10 22:49:47.665: W/System.err(30670): at android.os.Handler.dispatchMessage(Handler.java:99) 

PHP代碼:

<?php 


$response = array(); 


require_once 'include/DB_Functions.php'; 
    $db = new DB_Functions(); 

$result = mysql_query("SELECT latitude, longitude FROM tbl_map WHERE map_id=1") or die(mysql_error()); 



if (mysql_num_rows($result) > 0) { 

    $response["latlongs"] = array(); 

    while ($row = mysql_fetch_array($result)) { 

     $latlong = array(); 
     $latlong["latitude"] = $row["latitude"]; 
     $latlong["longitude"] = $row["longitude"]; 
     array_push($response["latlongs"], $latlong); 
    } 
    $response["success"] = 1; 
    // echoing JSON response 
    echo json_encode($response); 
} else { 
    // no products found 
    $response["success"] = 0; 
    $response["message"] = "Error nothing found"; 

    // echo no users JSON 
    echo json_encode($response); 
} 
?> 

回答

1

你的問題是在這裏

JSONObject json_user2 = json_user1.getJSONObject("latlong"); 

json_user1.get("latlong")JSONArray不是JSONObject。您可以知道,因爲字符串以[而不是{開頭,分別對應ArrayObject

請嘗試以下操作。

JSONArray json_user2 = json_user1.getJSONArray("latlong"); 

這應該適合您。

+0

現在我在這一行上得到另一個錯誤'double latitude = Double.parseDouble((json_user2.getString(TAG_LA_AUDUDE)));'。並且錯誤是**類型JSONArray中的方法getString(int)不適用於參數(字符串)** –

+1

當然,您在'JSONArray'中有一個'JSONObjects'數組,不是簡單的屬性(字符串)在嘗試使用它之前,我會閱讀JSONArray的文檔 - http://developer.android.com/reference/org/json/JSONArray.html。 – bclymer

+0

'for loop'幫助我,謝謝你的幫助和回覆。 –