我有一个数据库和一个表,其中有两个双列:
- 经度
- 纬度
由于我正在使用的一些内部逻辑,这些列允许为空。 我从数据库接收 JSON 形式的数据。
发生地点:
当这些列中存在 null 时,我会遇到问题。
导致错误的代码 -
双经度 = myJSONObject.getDouble("经度");
以及它引起的错误 -
org.json.JSONObject$1 类型经度处的值 null 无法转换为 double
我尝试过的:
我使用了 Double
而不是 double
,所以我查看了 java 代码,发现 JSONObject.getDouble()
返回一个原始的 double
,并且没有其他合适的方法返回 Double
。
所以我尝试使用 JSONObject.get()
返回一个 Object
,然后将其转换为 Double
-
双经度 = (Double)myJSONObject.get("经度 ");
但这引发了以下错误 -
无法将“org.json.JSONObject$1”转换为“java.lang.Double”
。
我发现Object
无法转换为Double
。
可能的解决方案:
我认为可行的唯一方法是将值作为String
获取并解析它,但这似乎效率低下。有没有更好的方法从 JSON 对象接收非原始 Double
?
一如既往,我感谢您提供的任何帮助。 (如果有不清楚的地方 - 请通知我,我会尽力更加连贯。我正在努力在该领域进行改进。)
编辑:请求的信息
生成 JSON:Android
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,我在 for 循环中从中提取 JSONObject。
JSON 结果示例:
[{"ModifiedOn":"2015-03-30 14:28:21", "名称":"以色列", "描述":"以色列", "电话":"0500000000", "类型": 0、“地址”:“阿拉伯联合酋长国”、“密码”:“123456”、“ID”:1、“纬度”:空、“组织者”:“阿拉伯联合酋长国”、“经度”:空、“城市”:“Tzur”伊格尔"}]
(请忽略希伯来语)
从这里开始:
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");
}
我希望这更清楚。
最佳答案
致谢@mkrakhin。 效果非常好。
Double longitude = myJSONObject.isNull("Longtitude") ? null : myJSONObject.getDouble("Longtitude");
关于java - 从 JSONObject 转换非原始 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29433933/