1

JELLYBEANAPI17を使用してAndroidアプリケーションのjsonデータをダウンロードしようとしています。

マニフェストファイルにもインターネットの使用許可を追加しました。

これは、アクティビティ内で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リクエストを適切に行う方法は?

  • 私が間違っている可能性があることを特定しますか?

4

1 に答える 1

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);

これで、文字列の結果をいじることができます。

于 2013-03-05T03:35:05.360 に答える