【发布时间】:2016-09-06 10:11:28
【问题描述】:
我正在尝试从 Android Studio 中的 MySQL 数据库解析 JSONArray,但出现以下异常:
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,然后将这些标记放在谷歌地图中。
放置标记和发出请求的代码:
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 中的双精度值?
有一个代码示例会很好,因为我还在学习:)
谢谢!
【问题讨论】:
-
您的 json 不包含数组,它在单个对象中包含对象。数组由“[”表示。
标签: php android mysql arrays json