androidでwebAPIからJSONを取得してこようとしているのですがエラーが出てしまいなかなかパースするところまでたどり着けません
package com.example.seita_v.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.net.MalformedURLException; import java.net.URL; public class MainActivity extends AppCompatActivity { TextView textView = null; Button button = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textview); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { new testAsycTask().execute(new URL("http://weather.livedoor.com/forecast/webservice/json/v1?city=400040")); } catch (MalformedURLException e) { e.printStackTrace(); } } }); } }
package com.example.seita_v.myapplication; import android.os.AsyncTask; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; /** * Created by seita_v on 2016/10/12. */ public class testAsycTask extends AsyncTask<URL,Void,String> { @Override protected String doInBackground(URL...urls) { // 取得したテキストを格納する変数 final StringBuilder result = new StringBuilder(); // アクセス先URL final URL url = urls[0]; HttpURLConnection con = null; try { // ローカル処理 // コネクション取得 con = (HttpURLConnection) url.openConnection(); con.setDoInput(true); con.connect(); // HTTPレスポンスコード final int status = con.getResponseCode(); Log.d("debug",Integer.toString(status)); if (status == HttpURLConnection.HTTP_OK) { Log.d("debug",result.toString()); // 通信に成功した // テキストを取得する final InputStream in = con.getInputStream(); final String encoding = con.getContentEncoding(); final InputStreamReader inReader = new InputStreamReader(in, encoding); final BufferedReader bufReader = new BufferedReader(inReader); String line = null; // 1行ずつテキストを読み込む while ((line = bufReader.readLine()) != null) { result.append(line); } bufReader.close(); inReader.close(); in.close(); } Log.d("debug",result.toString()); } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (ProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { if (con != null) { // コネクションを切断 con.disconnect(); } } return result.toString(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Log.d("結果",s); } }
10-12 06:28:59.897 18588-18661/com.example.seita_v.myapplication E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.example.seita_v.myapplication, PID: 18588 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.NullPointerException: charsetName == null at java.io.InputStreamReader.<init>(InputStreamReader.java:81) at com.example.seita_v.myapplication.testAsycTask$override.doInBackground(testAsycTask.java:46) at com.example.seita_v.myapplication.testAsycTask$override.access$dispatch(testAsycTask.java) at com.example.seita_v.myapplication.testAsycTask.doInBackground(testAsycTask.java:0) at com.example.seita_v.myapplication.testAsycTask.doInBackground(testAsycTask.java:19) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
エラーが起きている理由を教えていただけると大変ありがたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/12 11:44
2016/10/12 11:59
2016/10/12 12:26
2016/10/12 12:33 編集
2016/10/12 13:01