我想从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不包含数组,它具有单个对象内的对象。数组由“[”表示。 –