String response = getResultForRequest(url);
「url」はJSON形式で、http GETメソッドを使用して一連のデータを返します。
public static String getResultForRequest(String urlString)
throws IOException {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.connect();
InputStream is = urlConnection.getInputStream();
if (is == null)
return null;
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
try {
while ((line = br.readLine()) != null)
sb.append(line);
} finally {
br.close();
is.close();
}
return sb.toString();
}
GetResultForRequest(url)メソッドで渡した 'url'からJSON形式のデータをフェッチできません。rlConnection.connect();でエラーが発生しました。インターネットアクセス許可は、AndroidManifest.xmlファイルでも提供されます。
これが私のログです。
10-09 13:27:35.264: E/AndroidRuntime(9984): FATAL EXCEPTION: main
10-09 13:27:35.264: E/AndroidRuntime(9984): Java.lang.RuntimeException: Unable to start activity ComponentInfo{}: Android.os.NetworkOnMainThreadException
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2100)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2125)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.ActivityThread.access$600(ActivityThread.Java:140)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1227)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.os.Handler.dispatchMessage(Handler.Java:99)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.os.Looper.loop(Looper.Java:137)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.ActivityThread.main(ActivityThread.Java:4898)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Java.lang.reflect.Method.invokeNative(Native Method)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Java.lang.reflect.Method.invoke(Method.Java:511)
10-09 13:27:35.264: E/AndroidRuntime(9984): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1008)
10-09 13:27:35.264: E/AndroidRuntime(9984): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:775)
10-09 13:27:35.264: E/AndroidRuntime(9984): at dalvik.system.NativeStart.main(Native Method)
10-09 13:27:35.264: E/AndroidRuntime(9984): Caused by: Android.os.NetworkOnMainThreadException
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.Java:1118)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Java.net.InetAddress.lookupHostByName(InetAddress.Java:385)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Java.net.InetAddress.getAllByNameImpl(InetAddress.Java:236)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Java.net.InetAddress.getAllByName(InetAddress.Java:214)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:70)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:50)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.Java:340)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.Java:87)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection.connect(HttpConnection.Java:128)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.Java:315)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.Java:461)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.Java:433)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.Java:289)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.Java:239)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.Java:80)
10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.Java:165)
10-09 13:27:35.264: E/AndroidRuntime(9984): at com.csoft.foursquare.FoursquareService.getResultForRequest(Service.Java:564)
10-09 13:27:35.264: E/AndroidRuntime(9984): at com.csoft.foursquare.FoursquareService.getUserDetails(Service.Java:376)
10-09 13:27:35.264: E/AndroidRuntime(9984): at com.csoft.checkin.CheckinHistoryActivity.onCreate(HistoryActivity.Java:52)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.Activity.performCreate(Activity.Java:5206)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1094)
10-09 13:27:35.264: E/AndroidRuntime(9984): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2064)
10-09 13:27:35.264: E/AndroidRuntime(9984): ... 11 more
前もって感謝します。
これをonCreate()に追加します。
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
上記を一時的な解決策として使用してください。それ以外の場合は、threadまたはasynctaskを使用します。
メイン(UI)スレッドでネットワーク接続を確立しようとしています。これは、Android=)では許可されていません。サーバーから応答を受け取るまで、UI全体が停止するためです。
AsyncTaskを使用するか、別のスレッドで接続を実行してください。
お役に立てれば。
NetworkOnMainThreadException:アプリケーションがメインスレッドでネットワーク操作を実行しようとしたときにスローされる例外。
Asynctaskでメソッドを呼び出す必要があります。コードのみが機能します。これを回避するには、別のスレッドで呼び出す必要があります。したがって、asynctaskの方が優れています。
http://Android-developers.blogspot.in/2009/05/painless-threading.html
http://Android-er.blogspot.in/2012/04/androidosnetworkonmainthreadexception.html
http://www.lucazanini.eu/2012/Android/the-Android-os-networkonmainthreadexception-exception/?lang=en
ここにasynctaskの使用方法を示すリンクがあります