我有一个数据库和一个表,其中有两列双列:
由于我正在使用的一些内部逻辑,允许列为空。 我以JSON格式从数据库接收数据。
发生的地方:
当这些列中出现null时,我遇到了问题。
导致错误的代码 -
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()
的{{1}},然后将其转换为Object
-
Double
但是这引起了以下错误 -
Double Longitude = (Double)myJSONObject.get("Longitude ");
。
我发现Cannot cast 'org.json.JSONObject$1' to 'java.lang.Double'
无法投放到Object
。
可能的解决方案:
我认为可行的唯一方法是将值作为Double
并将其解析,但这似乎效率低下。有没有更好的方法从JSON对象接收非原始String
?
与往常一样,我感谢您提供的任何帮助。 (如果有什么不清楚的地方 - 请通知我,我会尽力做到更加连贯。我正在努力改善那个领域。)
编辑:请求的信息
生成JSON:Android
Double
生成JSON:PHP(在远程服务器上)
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;
}
}
这会生成一个JSONArray,我从中提取for循环中的JSONObject。
JSON结果示例:
<?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);
(请忽略希伯来语)
从这里开始:
[{"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"}]
我希望更清楚。
答案 0 :(得分:1)
积分转到@mkrakhin。 工作就像一个魅力。
Double longitude = myJSONObject.isNull("Longtitude") ? null : myJSONObject.getDouble("Longtitude");