0

アクティビティの入り口にバージョン検出を追加します。そして onCreate メソッドに以下のコードを追加します。

new Thread(){
         public void run(){
         try{
         checkToUpdate();
         }
            catch(Exception e) {
            }
         }
            }.run();

現在、新しいスレッドがあります。しかし、なぜエラーが発生するのですか: android.os.NetworkOnMainThreadException in android 4.0?

前もって感謝します!

4

4 に答える 4

2

run( )ではなくstart()にする必要があります

new Thread(){
         public void run()
         {
            try{
            checkToUpdate();
         }
            catch(Exception e) {
            }
         }
            }.start();

また、マニフェスト ファイルにインターネット アクセス許可を追加していない可能性があります

<manifest xlmns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
于 2012-11-29T09:05:30.517 に答える
1

start()メソッドを呼び出す必要があります。

run()メソッドは現在のスレッドで呼び出されますが、メソッドstart()は新しいスレッドを作成し、新しく作成されたスレッドでメソッドを呼び出しrun()ます。

以前の Android バージョンでは、メイン (UI) スレッドで長い操作を実行した場合、Dalvik がアプリケーションが数秒間応答しないことを検出した後でのみ、すぐに例外を取得しませんでした。現在、メイン スレッドでネットワーク通信を実行しようとすると例外がスローされるため、開発時にこれらの問題を簡単に見つけることができます。

于 2012-11-29T09:05:34.227 に答える
0

onCreate()メソッドを完了するために割り当てられる時間が短いため(おそらく4秒以下)、長時間実行されるタスクとネットワーク操作をonCreate()メソッドに配置しないでください。それをonResume()メソッドに移動し、可能であればそれをAsyncTaskに入れます。

于 2012-11-29T09:12:25.213 に答える
0

使用する必要があるAsyncTaskHandler with Thread、メインスレッドを使用してネットワークプロセスを実行できなくなりましたHONEY COMB

于 2012-11-29T09:05:27.137 に答える