2015-04-22 2 views
0

Я пытаюсь получить JSONObject с локального сервера() requestData, это мой объект:я не могу получить мой JsonOject после вызова функции

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

    EDIT: Я пытался показать значения с лог. v внутри try {}, я могу видеть мои значения, но когда я попытался использовать значение вне try {}, это не сработает, также когда я пытаюсь применить функцию с JsonLat, Jsonlng, JsonName как параметры внутри try {} это не работает, похоже что есть проблема с try {} или я не знаю !!!!!

+0

опубликовать LogCat какой ошибки вы получаете ?? – Prachi

+0

ничего, мое приложение работает, но мои 3 переменные все еще имеют 0 и нуль как значение –

ответ

0

Фактически это работает, когда я пытаюсь использовать другие случайные данные JSON. Я думаю, что ваша проблема связана с методами getDouble(). Вы можете просто получить их все как строки с помощью метода getString(). Затем вы можете сделать преобразование в Java.

+0

, но если это правда, по крайней мере, я получу заголовок на моем JsonName ??? –

+0

Да. Вы уверены, что данные верны? Потому что я пробовал ваш код с некоторыми другими данными JSON, и все работало хорошо. И в случае сбоя logcat должен показать какое-то исключение JSONException, можете ли вы упустить это? –

+0

Это сообщение моего logcat на JSONException: Value [{"id": 2, "title": "zone1", "longitude": - 4.997182, "широта": 34.042542, "icone": "http: \/\/192.168 .1.50 \/Heloo \/images \ /icone.png "}] типа org.json.JSONArray не может быть преобразован в JSONObject. –

1

Вы получаете JSONArray от сервера ..You должен разобрать 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 (i), я получаю не могу разрешить конструктор «JSONObject (java.lang.Object)» должен ли параметр Cast в java.lang.string ?? –

+0

@ IsmailiAlaouismail print cast.get (i) value – Prachi

+0

попробуйте привести его в строку – Prachi

Смежные вопросы