0

私のプログラムは、Android 2.1からAndroid 2.3まで完全に正常に動作しています

しかし、Androidの上位バージョンでは動作しません

マニフェストファイルで使用しました

<uses-sdk android:minSdkVersion="7"  
      android:targetSdkVersion="10" 
           android:maxSdkVersion="15"/>

Android 4.0.3 avd でプロジェクトを実行中に Logcat 出力エラーが発生する

05-09 12:45:12.051: E/AndroidRuntime(530): 致命的な例外: main` 05-09 12:45:12.051: E/AndroidRuntime(530): java.lang.RuntimeException: アクティビティ ComponentInfo{giv を開始できません.home/giv.home.Start}: android.os.NetworkOnMainThreadException 05-09 12:45:12.051: E/AndroidRuntime(530): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) で 05-09 12 :45:12.051: E/AndroidRuntime(530): android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 05-09 12:45:12.051: E/AndroidRuntime(530): android.app.ActivityThread で。 access$600(ActivityThread.java:123) 05-09 12:45:12.051: E/AndroidRuntime(530): android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 05-09 12:45:12.051 : E/AndroidRuntime(530): android.os.Handler.dispatchMessage(Handler.java:99) 05-09 12:45:12.051: E/AndroidRuntime(530): android.os.Looper.loop(Looper.java:137) 05-09 12:45:12.051: E/AndroidRuntime(530): android.app.ActivityThread.main(ActivityThread) .java:4424) 05-09 12:45:12.051: E/AndroidRuntime(530): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 05-09 12:45:12.051: E/AndroidRuntime(530) : java.lang.reflect.Method.invoke(Method.java:511) 05-09 12:45:12.051: E/AndroidRuntime(530): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit) で.java:784) 05-09 12:45:12.051: E/AndroidRuntime(530): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-09 12:45:12.051: E /AndroidRuntime(530): dalvik.system.NativeStart.main(ネイティブ メソッド) 05-09 12:45:12.051: E/AndroidRuntime(530): 原因: android.os.NetworkOnMainThreadException 05-09 12:45:12.051 :E/AndroidRuntime(530): android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 05-09 12:45:12.051: E/AndroidRuntime(530): java.net.InetAddress.lookupHostByName(InetAddress) .java:391) 05-09 12:45:12.051: E/AndroidRuntime(530): java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 05-09 12:45:12.051: E/AndroidRuntime(530) ): java.net.InetAddress.getAllByName(InetAddress.java:220) 05-09 12:45:12.051: E/AndroidRuntime(530): org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator. java:137) 05-09 12:45:12.051: E/AndroidRuntime(530): org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 05-09 12:45:12.051: E/AndroidRuntime(530): org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 05-09 12:45:12.051: E/AndroidRuntime(530): org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 05-09 12: 45:12.051: E/AndroidRuntime(530): org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 05-09 12:45:12.051: E/AndroidRuntime(530): org .apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 05-09 12:45:12.051: E/AndroidRuntime(530): org.apache.http.impl.client.AbstractHttpClient.execute( AbstractHttpClient.java:465) 05-09 12:45:12.051: E/AndroidRuntime(530): giv.home.ConnectionClass.connectToServer(ConnectionClass.java:41) 05-09 12:45:12.051: E/AndroidRuntime( 530): giv.home.Start.onCreate (Start.java:64) 05-09 12:45:12.051 で: E/AndroidRuntime (530):android.app.Activity.performCreate(Activity.java:4465) 05-09 12:45:12.051: E/AndroidRuntime(530): android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 05-09 12 :45:12.051: E/AndroidRuntime(530): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 05-09 12:45:12.051: E/AndroidRuntime(530): ... 11 もっと見る

4

2 に答える 2

3

これは、メイン スレッドで HTTPConnect を使用しようとしているからだと思います... Android では、メイン スレッドでの HTTP の使用がサポートされなくなり、バックグラウンド スレッドで使用する必要があります。もちろん、ただの推測ですが、それが起こっているのではないかと私は考えています。

ただし、ターゲット SDK のバージョンが 10 の場合、最大値の設定をスキップしないのはなぜでしょうか? つまり... ICS について、あなたのアプリを実行できる絶対的な最高レベルになると思うのは何ですか? min と target で十分だと思います。Max を設定するポイントは、(たとえば) ICS が利用可能になり、アプリがサポートしていない何かがあることを知っているので、アプリを ICS にインストールできないようにすることです。その場合、13 を設定すると、Honeycomb ユーザー (およびそれ以下) のみがそれを使用できるようになります。15 は利用可能な最高のバージョンであるため、設定するのは時期尚早です... 16 は、他のすべてのアプリと同じようにアプリを処理できる可能性があります。:)

[編集]

AsyncTask も必要ありません (ただし、その方がより Android らしい方法になります)。今のところ、通常のスレッドを使用してください...

 Handler h = new Handler();
 private Runnable stuffToDoAfterPost = new Runnable(){
       public void run(){
            //whatever you wish to happen after you have done your server call
       }
 };

private class CallServer extends Thread{
   public void run(){
      //make your server call here...


      //then...
      h.post(stuffToDoAfterPost);
   }
}

new CallServer().start(); 
于 2012-05-09T07:32:57.427 に答える