我有一個數據庫和一個表,其中有兩個雙列:鑄造非原始的雙從JSONObject的
- 經度
- 緯度
的列允許爲空,因爲我正在使用的一些內在邏輯。 我以JSON格式從數據庫接收數據。
凡發生:
我遇到的問題時,有這些列爲空。
導致錯誤的代碼 -
Double longitude = myJSONObject.getDouble("Longitude");
而且它造成的錯誤 -
Value null at Longitude of type org.json.JSONObject$1 cannot be converted to double
我試了一下:
我以前Double
,而不是double
,所以我看了看java代碼,發現JSONObject.getDouble()
返回一個原始的double
,並且沒有其他合適的方法返回Double
。
所以,我想,而不是使用JSONObject.get()
它返回一個Object
,然後將其轉換爲Double
因爲如此 -
Double Longitude = (Double)myJSONObject.get("Longitude ");
但是,提出了以下的錯誤 -
Cannot cast 'org.json.JSONObject$1' to 'java.lang.Double'
。我發現Object
不能投到Double
。
可能的解決辦法:
我看,可以工作越來越值作爲String
和解析它的唯一方法,但似乎效率不高。有沒有更好的方法從JSON對象中接收非原始的Double
?
一如既往,我感謝您提供的任何幫助。 (如果有什麼不清楚的地方 - 請通知我,我會盡力保持一致,我正在努力改善該領域。)
編輯:請求信息
生成JSON:機器人
private class GetAllEvents extends AsyncTask<Void, Void, JSONArray> {
@Override
protected JSONArray doInBackground(Void... params) {
try
{
URL myUrl = new URL("http://xx.xx.xxx.xxx/GetAllEvents.php");
HttpURLConnection request = (HttpURLConnection)myUrl.openConnection();
request.setChunkedStreamingMode(0); //Probably default, just in case
if (request.getResponseCode() != 200) //If request reached errors
return null;
InputStream stream = request.getInputStream();
String jsonStr = convertStreamToString(stream);
if (jsonStr.equals("[]")) //Empty array
return null;
return new JSONArray(jsonStr);
}
catch (Exception e)
{
Log.w("myApp", e.toString());
}
return null;
}
}
生成JSON:PHP(遠程服務器上)
<?require_once('MysqliDb.php');
$db = new MysqliDb();
//All closest events by date
$All = $db->query("SELECT * FROM Events;");
//Return in JSON
echo json_encode($All);
這產生一個JSONArray,來自wh ich我在for循環中提取JSONObject。
JSON結果例如: [{"ModifiedOn":"2015-03-30 14:28:21", "Name":"בטיזאדו", "Description":"חברי", "Phone":"0500000000", "Type":0, "Address":"הסטודיו", "Password":"123456", "ID":1, "Latitude":null, "Organiser":"דפנה", "Longitude":null, "City":"Tzur yigal"}]
(請忽略希伯來文)
,從這裏:
for (int i = 0; i < eventsArray.length(); i++) {
JSONObject myJSONObject = myJSONArray.getJSONObject(i);
--- *Do other things* ---
Double Longitude = (Double)myJSONObject.get("Longitude");
Double Latitude = (Double)myJSONObject.get("Latitude");
}
我希望這是更清晰。
Double longitude = myJSONObject.isNull(「Longitude」)? null:myJSONObject.getDouble(「Longitude」); – mkrakhin 2015-04-03 14:27:12
向我們展示如何生成'myJSONObject'和相應的JSON。 – 2015-04-03 14:27:14
@mkrakhin你能解釋一下'''和':'做什麼? 也許添加這個作爲答案,所以我可以標記它。 – Neta 2015-04-03 14:51:10