2013-12-08 4 views
0

Что я хочу сделать, это перевести строки JSON в реальном времени и получить их значения скорости.Parse JSON string in android

На сайте я использую это возвращает:

{"target": "EUR", "success": true, "rate": 0.7298, "source": "USD", "amount": 0.73, "message": ""} 

для URL:

http://currency-api.appspot.com/api/USD/EUR.json?key=KEY 

Для преобразования USD в евро. Я хочу сохранить скорость в поплавке. Я понимаю, что мне придется использовать GSON или что-то подобное, чтобы разобрать вывод JSON на сайте, но пока у меня нет решения, которое работает. Моя текущая AsyncTask выглядит так:

 class AsyncTest extends AsyncTask<Void,Void,Void> 
    { 
     protected void onPreExecute() 
     { 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) 
     { 
      try { 
       URL url = new URL("http://currency-api.appspot.com/api/USD/EUR.json?key=KEY"); 
       URLConnection connect = url.openConnection(); 
       BufferedReader in = new BufferedReader(new InputStreamReader(connect.getInputStream())); 
       String jsonObject = ""; 
       String line = ""; 
       while ((line = in.readLine()) != null) 
        jsonObject += line; 
       in.close(); 
       Toast.makeText(getApplicationContext(), jsonObject, Toast.LENGTH_LONG).show(); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return null; 
     } 
     protected void onPostExecute(Void result) 
     { 
      super.onPostExecute(result);; 
     } 

    } 

Что именно здесь не так? Это вызывает исключение во время выполнения. И как бы я разобрал ставку из этого URL-адреса?

+1

Что такое исключение во время выполнения? Вывести трассировку стека. Там есть тонны JSON-синтаксического анализа. –

+0

Вы должны использовать StringBuilder вместо String, это быстрее: jsonObject .append (строка); –

+0

Рассмотрите возможность использования библиотеки [droidQuery] (http://bit.ly/droidquery), чтобы легко получить данные, затем проанализируйте с помощью метода '$ .map (json)', который преобразует 'JSONObject' в' HashMap' для легкого разбора. – Phil

ответ

0
class AsyncTest extends AsyncTask<Void,Void,Void> 
{ 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) 
    { 
     try { 
      URL url = new URL("http://currency-api.appspot.com/api/USD/EUR.json?key=KEY"); 
      URLConnection connect = url.openConnection(); 
      BufferedReader in = new BufferedReader(new InputStreamReader(connect.getInputStream())); 
      StringBuilder jsonObject = new StringBuilder(); 
      String line = ""; 
      while ((line = in.readLine()) != null) 
       jsonObject.append(line); 
      in.close(); 
      Toast.makeText(getApplicationContext(), jsonObject.toString(), Toast.LENGTH_LONG).show(); 
      JSONObject json = new JSONObject(jsonObject.toString()); 
      ///// Parse the Json object right here using getString 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result) 
    { 
     super.onPostExecute(result);; 
    } 

} 

Чтобы разобрать объект JSON, посмотрите на docs

Например

private void parseJson(JSONObject json){ 
    String target = json.getString("target"); 
    boolean success = json.getBoolean("success"); 
    // If the field is optional, use optXXX 
    double rate = json.optDouble("rate", 1d); 
    ...... 

} 
+0

спасибо, я попробую это. –

+0

Вот [пример для синтаксического разбора JSON] (http://android.codota.com/scenarios/528e1e7dda0a36cf485bcf50/JSONObject.getString?tag=bumblebee) – drorw

0

пытаются поймать JSONException.

+1

OP не создает JSONObject в любом месте, поэтому исключение JSONException не будет выбрано – panini