2015-04-03 52 views
0

我有一個數據庫和一個表,其中有兩個雙列:鑄造非原始的雙從JSONObject的

  • 經度
  • 緯度

的列允許爲空,因爲我正在使用的一些內在邏輯。 我以JSON格式從數據庫接收數據。

凡發生:

我遇到的問題時,有這些列爲空。

導致錯誤的代碼 -

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()它返回一個Object,然後將其轉換爲Double因爲如此 -

Double Longitude = (Double)myJSONObject.get("Longitude ");

但是,提出了以下的錯誤 -

Cannot cast 'org.json.JSONObject$1' to 'java.lang.Double'。我發現Object不能投到Double

可能的解決辦法:

我看,可以工作越來越值作爲String和解析它的唯一方法,但似乎效率不高。有沒有更好的方法從JSON對象中接收非原始的Double

一如既往,我感謝您提供的任何幫助。 (如果有什麼不清楚的地方 - 請通知我,我會盡力保持一致,我正在努力改善該領域。)

編輯:請求信息

生成JSON:機器人

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,來自wh ich我在for循環中提取JSONObject。

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

我希望這是更清晰。

+3

Double longitude = myJSONObject.isNull(「Longitude」)? null:myJSONObject.getDouble(「Longitude」); – mkrakhin 2015-04-03 14:27:12

+0

向我們展示如何生成'myJSONObject'和相應的JSON。 – 2015-04-03 14:27:14

+0

@mkrakhin你能解釋一下'''和':'做什麼? 也許添加這個作爲答案,所以我可以標記它。 – Neta 2015-04-03 14:51:10

回答

1

Credits轉到@mkrakhin。 工作就像一個魅力。

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