2013-03-05 117 views
1

我试图下载JSON数据使用豆形软糖API的Android应用程序17的Android杰利贝恩失败JSON下载上HttpURLConnection的

我已经添加了清单文件还内互联网的使用许可。

这是活动中获取JSON数据的代码:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //final Button btnLoad = (Button) findViewById(R.id.btnLoad); 
    tvResult = (TextView) findViewById(R.id.txtView); 
    // 

} 

    public void onClick(View v) { 
    final LoadData data = new LoadData(); 
     Log.d("TAG","Button Pressed!"); 


       data.execute(); 
       tvResult.setText(data.get()); 


    } 

public static String getJSON(String url) throws IOException { 
    URL u = new URL(url); 
    HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
    try { 
     c.setRequestMethod("GET"); 
     c.setRequestProperty("Content-length", "0"); 
     c.setUseCaches(false); 
     c.setAllowUserInteraction(false); 

     c.connect(); 
     //int status = c.getResponseCode(); 


      BufferedReader br = new BufferedReader(new InputStreamReader(
        c.getInputStream())); 
      StringBuilder sb = new StringBuilder(); 
      String line =""; 
      while ((line = br.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      br.close(); 
      return sb.toString(); 


    }finally{ 
    c.disconnect(); 
    } 
} 
// Inner class for making an asyncTask 
public class LoadData extends AsyncTask<Void, Void, String> { 

    @Override 
    protected String doInBackground(Void... params) { 
     final TMDb tmdb = new TMDb(); 
     String data = ""; 
     try { 
      data = getJSON("http://api.themoviedb.org/3/genre/list?api_key=#");     
     tvResult.setText(data); 

      Log.d("TAG-DATA", data); 
      Log.d("TAG", "RUN STARTED!"); 

     } catch (IOException e) { 
      Log.d("ERROR", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return data; 
    } 

} 

这工作得很好了常规Java应用程序。但是在android应用程序中往往会杀死该活动。它生产了以下错误:

D/TAG(13771): Button Pressed! 
W/dalvikvm(13771): threadid=11: thread exiting with uncaught exception (group=0x40bce930) 
E/AndroidRuntime(13771): FATAL EXCEPTION: Thread-6603 
E/AndroidRuntime(13771): java.lang.NullPointerException: println needs a message 
E/AndroidRuntime(13771): at android.util.Log.println_native(Native Method) 
E/AndroidRuntime(13771): at android.util.Log.d(Log.java:138) 
E/AndroidRuntime(13771): at com.mjavacam.tmdb.MainActivity$1.run(MainActivity.java:88) 
E/AndroidRuntime(13771): at java.lang.Thread.run(Thread.java:856) 

任何人都可以协助通过展示我在下面:

  • 如何正确地使从Android应用程序中的http请求?

  • 确定我可能做错了什么?

回答

2

错误发生在 Log.d(“Tag Data”,data); 您从getJson类返回的数据字符串返回null。

您可以更改阅读部分(即阅读从http://api.themoviedb.org/3/genre/list?api_key=#响应)作为替代如下 使用BufferedReader中您可以使用此

HttpResponse response; 
HttpPost post = new HttpPost("http://api.themoviedb.org/3/genre/list?api_key=#"); 
HttpEntity httpEntity = response.getEntity(); 
String result = EntityUtils.toString(httpEntity); 

现在你可以玩弄字符串的结果。

+0

非常感谢你,它的作品很棒! – 2013-03-05 18:30:32