从JSONObject转换非原始Double

时间:2015-04-03 14:19:08

标签: java json casting double

我有一个数据库和一个表,其中有两列双列:

  • 经度
  • 纬度

由于我正在使用的一些内部逻辑,允许列为空。 我以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"}]

我希望更清楚。

1 个答案:

答案 0 :(得分:1)

积分转到@mkrakhin。 工作就像一个魅力。

Double longitude = myJSONObject.isNull("Longtitude") ? null : myJSONObject.getDouble("Longtitude");