从 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");