失礼します。現在、このサイトを参考にOpen weather APIから天気データをとってこようと考えているのですが下記のコードのgetInputStream(29行目)のところで強制終了してしまいます。
どなたか恐縮ですがお知恵を拝借させていただけないでしょうか?マニフェスト部分にも
java
1 <uses-permission android:name="android.permission.INTERNET" />
を追記はしています。また、requestURLの部分を直接ブラウザに打ち込んだときも正常に天気情報を取得できます。
よろしくお願いいたします。
<追記>エラーコードは以下のようになっています
java
1Caused by: android.os.NetworkOnMainThreadException 2 at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 3 at java.net.InetAddress.lookupHostByName(InetAddress.java:431) 4 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 5 at java.net.InetAddress.getAllByName(InetAddress.java:215) 6 at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 7 at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 8 at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 9 at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 10 at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 11 at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 12 at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 13 at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 14 at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437) 15 at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388) 16 at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231) 17 at com.test.hashimoto.test.MainActivity.onCreate(MainActivity.java:29) 18 at android.app.Activity.performCreate(Activity.java:6251) 19 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 20 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 21 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 22 at android.app.ActivityThread.-wrap11(ActivityThread.java) 23 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 24 at android.os.Handler.dispatchMessage(Handler.java:102) 25 at android.os.Looper.loop(Looper.java:148) 26 at android.app.ActivityThread.main(ActivityThread.java:5417) 27 at java.lang.reflect.Method.invoke(Native Method) 28 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 29 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ソースコード
java
1import android.support.v7.app.AppCompatActivity; 2import android.os.Bundle; 3 4import java.io.BufferedReader; 5import java.io.IOException; 6import java.io.InputStream; 7import java.io.InputStreamReader; 8import java.io.UnsupportedEncodingException; 9import java.net.MalformedURLException; 10import java.net.URL; 11 12public class MainActivity extends AppCompatActivity { 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 //下記のURLをブラウザに打ち込んだときは正常にデータを取得できる 19 String requestURL = "http://api.openweathermap.org/data/2.5/find?lat=43.067885&lon=141.355539&cnt=1&mode=json&&APPID=自分のID"; 20 URL url = null; 21 try { 22 url = new URL(requestURL); 23 } catch (MalformedURLException e) { 24 e.printStackTrace(); 25 } 26 InputStream is = null; 27 try { 28 is = url.openConnection().getInputStream();//ここで強制終了 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } 32 33 // JSON形式で結果が返るためパースのためにStringに変換する 34 BufferedReader reader = null; 35 try { 36 reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 37 } catch (UnsupportedEncodingException e) { 38 e.printStackTrace(); 39 } 40 StringBuilder sb = new StringBuilder(); 41 String line; 42 try { 43 while (null != (line = reader.readLine())) { 44 sb.append(line); 45 } 46 } catch (IOException e) { 47 e.printStackTrace(); 48 } 49 String data = sb.toString(); 50 51 } 52} 53
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/03 13:14