2013-12-21 3 views
-4

Я пытаюсь получить среднюю цену 30d USD для биткойнов отсюда: http://api.bitcoincharts.com/v1/weighted_prices.json. Код Json, который у меня есть, не работает в try/catch, и ошибка является нулевой (я попытался изучить другие вопросы, но все они, похоже, возвращают ошибки, тогда как мои просто возвращают нуль):Android: JSON не работает, Log.e возвращает нуль

public class MainActivity extends ActionBarActivity { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.dogewidget); 
      TextView btctest = (TextView) findViewById(R.id.title); 

      //Create a new HTTP Client 
      DefaultHttpClient httpclient = new DefaultHttpClient(); 
      //Setup the get request 
      HttpPost httppost = new HttpPost("http://api.bitcoincharts.com/v1/weighted_prices.json"); 
      //Depending on web service 
      httppost.setHeader("Content-type", "application/json"); 

      InputStream inputStream = null; 
      String result = null; 
      try { 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 

       inputStream = entity.getContent(); 
       // json is UTF-8 by default 
       BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 

       result = reader.readLine(); 

       JSONObject jObject = new JSONObject(result); 
       JSONObject jsubObject = jObject.getJSONObject("USD"); 
       String btcjson = jsubObject.getString("30d"); 
       btctest.setText(btcjson); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       Log.e("error", "" + e.getMessage()); 
       btctest.setText("Error " + e.getMessage()); 
      } finally { 
       try { 
        if (inputStream != null) inputStream.close(); 
       } catch (Exception squish) { 
       } 
      } 
     } 
} 

Любая помощь будет оценена! Благодарю.

+0

Что означает «нуль»? Означает ли это исключение NullPointerException? Если это так, вам нужно опубликовать трассировку стека. –

+1

Использовать 'AsyncTask' для выполнения вашего веб-звонка – SathishKumar

+0

Возможно, я ошибаюсь, но, похоже, я помню, если вы вызовете' e.printStackTrace() ', оно очистит сообщение. Это означает, что когда вы пытаетесь использовать 'Log.e (...)' в своем коде с 'e.getMessage()', он просто возвращает «null» в качестве строки сообщения. Нет смысла использовать 'Log.e (...)' в этой точке, так как 'e.printStackTrace()' будет выгружать всю трассировку стека исключений, включая сообщение и причину. – Squonk

ответ

0

Попробуйте этот код.

private void get_value(String php) { 
String responseString = null; 
try{  
    HttpClient httpclient = new DefaultHttpClient(); 
    String url ="your_url"; 
    HttpPost httppost = new HttpPost(url); 
    HttpResponse response = httpclient.execute(httppost); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    response.getEntity().writeTo(out); 
    out.close(); 
    responseString = out.toString(); 
    Toast.makeText(getApplicationContext(),responseString,1000).show(); 

    //The below code is for Separating values.It may varies according with your result 

    JSONArray ja = new JSONArray(responseString); 
    int x=Integer.parseInt(ja.getJSONObject(0).getString("your_string_name")); 

} catch(Exception e) { 
} 
} 
Смежные вопросы