2015-04-22 58 views
0

我試圖從本地服務器得到一個JSONObject後讓我JsonOject,這是我的目標:我不能打電話的RequestData()函數

[ 
    { 
     "id":2, 
     "latitude":34.042542, 
     "longitude":-4.997182, 
     "title":"zone1", 
     "icone":"http://192.168.1.50/Heloo/images/icone.png" 
    } 
] 

我想設置3個變量(JsonLat作爲緯度的兩倍/ JsonLong經度爲雙/ JsonName作爲字符串的標題)但執行我的應用程序後,我無法獲得此值。

  • 的RequestData(URL)的onCreate()只是後的setContentView()
  • 這是我HttpManager類:

    import java.io.BufferedReader; 
        import java.io.IOException; 
        import java.io.InputStreamReader; 
        import java.net.HttpURLConnection; 
        import java.net.URL; 
    
    
    public class HttpManager { 
    
    public static String getData(String uri) { 
    
    BufferedReader reader = null; 
    
    try { 
        URL url = new URL(uri); 
        HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    
        StringBuilder sb = new StringBuilder(); 
        reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    
        String line; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
    
        return sb.toString(); 
    
    } catch (Exception e) { 
        e.printStackTrace(); 
        return null; 
    } finally { 
        if (reader != null) { 
         try { 
          reader.close(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
          return null; 
         } 
        } 
    } 
    
    } 
    
    } 
    
  • 這是我的RequestData()的定義和MyTask類:

    public void requestData(String uri) { 
    MyTask task = new MyTask(); 
    task.execute(uri); 
    } 
    
    public class MyTask extends AsyncTask<String, String, String> { 
    
    @Override 
    protected void onPreExecute() { 
    //   updateDisplay("Starting task"); 
    
        //tasks.add(this); 
    } 
    
    @Override 
    protected String doInBackground(String... params) { 
    
        String content = HttpManager.getData(params[0]); 
        return content; 
    } 
    
    @Override 
    protected void onPostExecute(String result) { 
        try { 
    
          JSONArray cast = new JSONArray(result); 
          for (int i=0; i<cast.length(); i++) { 
          JSONObject Marker = new JSONObject(cast.get(i).toString()); 
          JsonLat = Marker.getDouble("latitude"); 
          Jsonlong = Marker.getDouble("longitude"); 
          JsonName = Marker.getString("title"); 
         } 
    
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
    
    } 
    @Override 
    protected void onProgressUpdate(String... values) { 
    //   updateDisplay(values[0]); 
    } 
    
    } 
    

    編輯:我試圖表明與日誌的值。 v裏面的try {},我可以看到我的值,但是當我試圖使用try {}之外的值時,它不起作用,當我嘗試將JsonLat,Jsonlng,JsonName作爲參數應用於嘗試{}它似乎不工作有一個問題與嘗試{}或我不知道!!!!!

+0

發表您的logcat你做了什麼錯誤? – Prachi

+0

什麼都沒有,我的應用程序工作,但我的3個變量仍然有0和空價值 –

回答

0

實際上,當我嘗試使用另一個隨機JSON數據時,這種方法可行。我認爲你的問題是與getDouble()方法。您可以使用getString()方法將它們全部作爲字符串。然後你可以用Java進行轉換。

+0

但是,如果這是真的,至少我會得到我的JsonName的標題? –

+0

是的。你確定數據是正確的嗎?因爲我用其他一些JSON數據嘗試了你的代碼,並且都運行良好。如果失敗,logcat必須顯示一些JSONException,你能否錯過? –

+0

這是我在JSONException上的logcat消息:值[{「id」:2,「title」:「zone1」,「longitude」: - 4.997182,「latitude」:34.042542,「icone」:「http:\/\/192.168 .1.50 \/Heloo \/images \ /icone.png「}]的org.json.JSONArray類型無法轉換爲JSONObject。 –

1

您是從服務器..你必須分析得到JSONArray JsonArray

JSONArray cast // your jsonarray object 
for (int i=0; i<cast.length(); i++) { 
    JSONObject Marker = new JSONObject(cast.get(i)); 
     JsonLat = Marker.getDouble("latitude"); 
     Jsonlong = Marker.getDouble("longitude"); 
     JsonName = Marker.getString("title"); 
} 
+0

你的建議應該爲我工作,但是當我嘗試初始化我的標記cast.get(我)我不能解析構造函數'JSONObject(java.lang.Object)'我應該施放參數到java.lang.string ?? –

+0

@IsmailiAlaouismail打印cast.get(i)值 – Prachi

+0

嘗試將其轉換爲字符串 – Prachi

相關問題