0

アプリケーションから次のコードがあります。

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.pagesbyz.com");
ResponseHandler<String> resHandler = new BasicResponseHandler();
try {
    String page = httpClient.execute(httpGet, resHandler);
    Toast.makeText(getApplicationContext(), "SUCCESS", 2000).show();
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

マニフェストに次の行を追加しました。

<uses-permission android:name="android.permission.INTERNET" />

次の LogCat エラーを含む私のアプリ FC:

11-04 11:59:14.137: E/AndroidRuntime(11052): FATAL EXCEPTION: main
11-04 11:59:14.137: E/AndroidRuntime(11052): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.testing/com.test.testing.AndroidFragmentation}: android.os.NetworkOnMainThreadException
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2356)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.ActivityThread.access$600(ActivityThread.java:150)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.os.Looper.loop(Looper.java:137)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.ActivityThread.main(ActivityThread.java:5195)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at java.lang.reflect.Method.invokeNative(Native Method)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at java.lang.reflect.Method.invoke(Method.java:511)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at dalvik.system.NativeStart.main(Native Method)
11-04 11:59:14.137: E/AndroidRuntime(11052): Caused by: android.os.NetworkOnMainThreadException
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:653)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at com.test.testing.AndroidFragmentation.onCreate(AndroidFragmentation.java:36)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.Activity.performCreate(Activity.java:5104)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
11-04 11:59:14.137: E/AndroidRuntime(11052):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2260)

それを解決する方法はありますか?ありがとう!

4

4 に答える 4

2

非 UI スレッドから要求を行う必要があります。たとえば、AsyncTask または ? スレッドを拡張します

于 2013-11-04T17:13:09.913 に答える
1

アクティビティからサーバーから直接結果を取得しようとしています。これは 2.x まで許可されていました。Honeycomb 以降、NetworkOnMainThreadException が導入されました。この操作には時間がかかる場合があるため、UI スレッドがブロックされ、ANRが表示される可能性があります。時間がかかる操作については、別のスレッドを使用する必要があります。

AsyncTaskを使用できます。アクティビティとは別のスレッドで実行されます。

AsyncTaskのdoInBackground()で、目的の操作を実行し、その結果をこのクラスのonPostExecute()に渡すことができます。これに基づいて、アプリケーションで表示したいトースト メッセージを表示できます。

于 2013-11-04T17:22:35.863 に答える