我想從Android Studio中MySQL數據庫分析JSONArray
,但我得到以下異常:解析JSONArray雙Android Studio中
org.json.JSONException: Value {"success":false,"0":{"success":false,"marker_id":null,"lat":null,"lng":null,"snippet":null},"1":{"success":false,"marker_id":null,"lat":null,"lng":null,"snippet":null},"2":{"success":false,"marker_id":null,"lat":null,"lng":null,"snippet":null},"3":{"success":false,"marker_id":null,"lat":null,"lng":null,"snippet":null}} of type org.json.JSONObject cannot be converted to JSONArray
我所試圖做的是解析包含幾個標記LatLng的雙精度值,然後將這些標記放置在Google地圖中。
用於放置標記和發出請求代碼:
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonResponse = new JSONArray(response);
Log.i("RESPONSE:", "[" + jsonResponse + "]");
for (int i = 0; i < response.length(); i++) {
//boolean success = jsonResponse.getBoolean("success");
//double lat = jsonResponse.getDouble("lat");
//double lng = jsonResponse.getDouble("lng");
//int snippet = jsonResponse.getInt("snippet");
//LatLng Mplace = new LatLng(lat, lng);
//MarkerOptions marker = new MarkerOptions().position(Mplace).title("Marker").snippet("Snippet:" + "0");
//mMap.addMarker(marker);
}
} catch (JSONException e) {
e.printStackTrace();
Log.i("RESPONSE:", "[" + response + "]");
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
};
MarkerRequest markerRequest = new MarkerRequest(responseListener);
RequestQueue queue = Volley.newRequestQueue(AllMarkersActivity.this);
queue.add(markerRequest);
現在我都談到了標記的實際配售,這是當我得到上述的異常。當我刪除評論我得到這個紅色短信:
getDouble (int) cannot be applied to (java.lang.String)
這裏是我的請求代碼:
public class MarkerRequest extends StringRequest {
private static final String MARKER_REQUEST_URL = "http://simonjensen.comxa.com/GetMarkers.php";
private Map<String, String> params;
//private JSONObject data = new JSONObject("http://simonjensen.comxa.com/GetMarkers.php");
public MarkerRequest(Response.Listener<String> listener){
super(Request.Method.POST, MARKER_REQUEST_URL, listener, null);
params = new HashMap<>();
}
@Override
public Map<String, String> getParams() {
return params;
}
這裏是我的PHP腳本:
<?php
$con = mysqli_connect("myhost", "myuser", "mypass", "mydatabase");
/*$statement = mysqli_prepare($con);
$sql = "SELECT * FROM markers ORDER BY marker_id ASC ";
$strSQL = "SELECT * FROM `markers` ORDER BY marker_id ASC ";
$objQuery = mysql_query($statement, $strSQL) or die(mysql_error());
$arrRows = array();
$arryItem = array();*/
$statement = mysqli_prepare($con, "SELECT * FROM markers ORDER BY marker_id ASC ");
mysqli_stmt_execute($statement);
//mysqli_stmt_bind_result($statement, $colmarker_id, $collat, $collng, $colsnippet);
//$response = array();
$arrRows = array();
$arryItem = array();
//$response["success"] = false;
$arrRows["success"] = false;
$arryItem["success"] = false;
while(mysqli_stmt_fetch($statement)) {
$arryItem["marker_id"] = $arr["marker_id"];
$arryItem["lat"] = $arr["lat"];
$arryItem["lng"] = $arr["lng"];
$arryItem["snippet"] = $arr["snippet"];
$arrRows[] = $arryItem;
}
echo json_encode($arrRows);
?>
所以我的問題可以縮小到這個:
我如何解析一個JSONArray
(在一個數組內?),我如何在那個JSONArray
內解析一個double值?
這將是一個代碼示例很好,因爲我仍然在學習:)
謝謝!
你的json不包含數組,它具有單個對象內的對象。數組由「[」表示。 –