-2

モバイルデバイスがインターネットにアクセスできるかどうかを確認しようとしていますが、次のエラーが発生します。

08-13 14:20:48.990: E/AndroidRuntime(2546): FATAL EXCEPTION: main
08-13 14:20:48.990: E/AndroidRuntime(2546): java.lang.RuntimeException: Unable to start activity ComponentInfo{cx.hell.android/cx.hell.android.conn.tryInternet}: android.os.NetworkOnMainThreadException
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.os.Looper.loop(Looper.java:137)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.ActivityThread.main(ActivityThread.java:4745)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at java.lang.reflect.Method.invokeNative(Native Method)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at java.lang.reflect.Method.invoke(Method.java:511)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at dalvik.system.NativeStart.main(Native Method)
08-13 14:20:48.990: E/AndroidRuntime(2546): Caused by: android.os.NetworkOnMainThreadException
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at cx.hell.android.conn.tryInternet.executeReq(tryInternet.java:47)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at cx.hell.android.conn.tryInternet.onCreate(tryInternet.java:27)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.Activity.performCreate(Activity.java:5008)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
08-13 14:20:48.990: E/AndroidRuntime(2546):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
08-13 14:20:48.990: E/AndroidRuntime(2546):     ... 11 more

私のアプリケーションでは、デバイスがWIFIまたはデータ接続のいずれかによってインターネットに接続されているかどうかを確認する必要があります。だから私はグーグルとの接続があるかどうかをテストします。この方法が私の問題の原因になる可能性がある場合はそうではありません。これは私が使用しているコードです。

public class tryInternet extends Activity{
    String LOGTAG="";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

            //LOAD LIBRARY//
            URL url;
            try {
                url = new URL("http://www.google.es");
                executeReq(url);
                Intent intent = new Intent(tryInternet.this, MainActivity.class);
                startActivity(intent);
                finish();
            } catch (IOException e) {
                Toast.makeText(getBaseContext(), "DON'T HAVE A CONNECTION OF INTERNET", 
                        Toast.LENGTH_LONG).show();
            }

    }
    private void executeReq(URL urlObject) throws IOException{
        HttpURLConnection conn = null;

        conn = (HttpURLConnection) urlObject.openConnection();
        conn.setReadTimeout(100000);//milliseconds
        conn.setConnectTimeout(150000);//milliseconds
        conn.setRequestMethod("GET");
        conn.setDoInput(true);

        // Start connect
        conn.connect();
        InputStream response = conn.getInputStream();
        String iS= "" + response;
        Log.d("Response:", iS);
    }

}

何か案が?ありがとう!

4

2 に答える 2

4

NetworkOnMainThreadException :

アプリケーションがメイン スレッドでネットワーク操作を実行しようとしたときにスローされる例外。

そのため、バックグラウンド スレッドから UI 要素を更新するには、 ThreadrunOnUiThreadAsyncTaskHandler、またはHandlerThreadを使用する必要があります。

于 2012-08-13T12:43:39.370 に答える
1

メイン スレッドでネットワーク操作を実行しようとしていますが、Android アプリケーションのメイン UI スレッドでは許可されていません。

NetworkOnMainThreadExceptionを見てください

これを解決するには、AsyncTaskまたはThread を使用して、ネットワーク関連の操作をその中に入れます。

于 2012-08-13T12:44:13.540 に答える