从 JSONObject 转换非原始 Double
Casting non primitive Double from JSONObject
我有一个数据库和一个 table,其中有两个双列:
- 经度
- 纬度
由于我正在使用的一些内部逻辑,这些列允许为空。
我以 JSON 形式从数据库接收数据。
发生地点:
当这些列中为空时,我遇到了问题。
导致错误的代码 -
Double longitude = myJSONObject.getDouble("Longitude");
及其导致的错误 -
Value null at Longitude of type org.json.JSONObject cannot be converted to double
我试过的:
我使用了 Double
而不是 double
,所以我查看了 java 代码并发现 JSONObject.getDouble()
returns 原始 double
,并且没有其他 suitable 方法 returns Double
.
所以我尝试使用 JSONObject.get()
,其中 returns 和 Object
,然后将其转换为 Double
-
Double Longitude = (Double)myJSONObject.get("Longitude ");
但这引发了以下错误 -
Cannot cast 'org.json.JSONObject' to '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);
这会生成一个 JSON 数组,我在 for 循环中从中提取 JSON 对象。
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");
}
我希望这更清楚。
致谢@mkrakhin。
工作得很好。
Double longitude = myJSONObject.isNull("Longtitude") ? null : myJSONObject.getDouble("Longtitude");
我有一个数据库和一个 table,其中有两个双列:
- 经度
- 纬度
由于我正在使用的一些内部逻辑,这些列允许为空。 我以 JSON 形式从数据库接收数据。
发生地点:
当这些列中为空时,我遇到了问题。
导致错误的代码 -
Double longitude = myJSONObject.getDouble("Longitude");
及其导致的错误 -
Value null at Longitude of type org.json.JSONObject cannot be converted to double
我试过的:
我使用了 Double
而不是 double
,所以我查看了 java 代码并发现 JSONObject.getDouble()
returns 原始 double
,并且没有其他 suitable 方法 returns Double
.
所以我尝试使用 JSONObject.get()
,其中 returns 和 Object
,然后将其转换为 Double
-
Double Longitude = (Double)myJSONObject.get("Longitude ");
但这引发了以下错误 -
Cannot cast 'org.json.JSONObject' to '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);
这会生成一个 JSON 数组,我在 for 循环中从中提取 JSON 对象。
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");
}
我希望这更清楚。
致谢@mkrakhin。 工作得很好。
Double longitude = myJSONObject.isNull("Longtitude") ? null : myJSONObject.getDouble("Longtitude");