2012-05-09 83 views
0

我的程序正在從Android 2.1的精絕至Android 2.3應用程序不工作在Android 4.0

但它不工作的更高的安卓

版本我已經在我的清單文件中使用

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

logcat的輸出誤差,同時運行該項目在Android 4.0.3 AVD結果

05-09 12時45分12秒.051:E/AndroidRuntime(530):致命異常:主' 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):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 05-09 12 :45:12.051:E/AndroidRuntime(530):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 05-09 12:45:12.051:E/AndroidRuntime(530):at android.app .ActivityThread.access $ 600(ActivityThread.java:123)05-09 12:45:12.051:E/AndroidRuntime(530):at android.app.ActivityThre ad $ H.handleMessage(ActivityThread.java:1147) 05-09 12:45:12.051:E/AndroidRuntime(530):at android.os.Handler.dispatchMessage(Handler.java:99)05-09 12 :45:12.051:E/AndroidRuntime(530):at android.os.Looper.loop(Looper.java:137)05-09 12:45:12.051: E/AndroidRuntime(530):at android.app .ActivityThread.main(ActivityThread.java:4424)05-09 12:45:12.051:E/AndroidRuntime(530):at java.lang.reflect.Method.invokeNative(Native Method)05-09 12:45 :12.051:E/AndroidRuntime(530):at java.lang.reflect.Method.invoke(Method.java:511)05-09 12:45:12.051: E/AndroidRuntime(530):at com.android .internal.os.ZygoteInit $ MethodAn dArgsCaller.run(ZygoteInit.java:784) 05-09 12:45:12.051:E/AndroidRuntime(530):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)05-09 12:45:12.051:E/AndroidRuntime(530):at 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):at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 05-09 12:45:12.051:E/AndroidRuntime(530):at java.net.InetAddress.lookupHostByName(InetAddress.java:391)05-09 12:45:12.051:E/AndroidRuntime(530):at java.net.I netAddress.getAllByNameImpl(InetAddress.java:242)05-09 12:45:12.051:E/AndroidRuntime(530):at java.net.InetAddress.getAllByName(InetAddress.java:220)05-09 12:45 :12.051:E/AndroidRuntime(530):at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 05-09 12:45:12.051:E/AndroidRuntime(530):at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 05-09 12:45:12.051:E/AndroidRuntime(530):at org.apache.http.impl.conn。 AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 05-09 12:45:12.051:E/AndroidRuntime(530):at org.apache.http.impl.client.DefaultRequestDirector。執行(DefaultRequestDirector.java:360) 05-09 12:45:12.051:E/AndroidRuntime(530):at 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) 十二月5日至9日:45:12.051:E/AndroidRuntime( 530):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 05-09 12:45:12.051:E/AndroidRuntime(530):at giv.home.ConnectionClass。 connectToServer(ConnectionClass.java:41) 十二月5日至9日:45:12.051:E/AndroidRuntime(530):在 giv.home.Start.onCreate(Start.java:64)十二月5日至9日:45:12.051: E/AndroidRuntime(530):at android.app.Activity.performCreate(Activity.java:4465)05-09 12:45:12.051:E/AndroidRuntime(530):at android.app.Instrumentation.callActivityOnCreate( Instrumentation.java:1049) 05-09 12:45:12.051:E/AndroidRuntime(530):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 05-09 12:45:12.051:E/AndroidRuntime(530):... 11更多

+0

可能重複(HTTP ://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – laalto

回答

3

我認爲這是因爲您正嘗試在主線程中使用HTTPConnect ... Android不再支持在主線程中使用HTTP,並且要求您在後臺線程中執行。當然只是猜測......但這就是我懷疑正在發生的事情。

但是,如果你的目標SDK版本是10,那麼爲什麼不直接跳過設置最大?我的意思是...你覺得ICS是什麼,它將成爲你的應用可以運行的絕對最高水平?我相信,min和target是完全足夠的。設置Max的重點是(例如)您的應用程序不能在ICS上安裝,因爲ICS可用,並且您知道應用程序不支持該應用程序。所以,在這種情況下,你會設置13,只有Honeycomb用戶(和更低)才能夠使用它。由於15是可用的最高版本,所以將其設置爲過早... 16可能與其他所有應用程序一樣能夠處理您的應用程序,儘管您知道! :)

[編輯]

你甚至都不需要一個的AsyncTask(雖然這將是做更多的Androidy方式)。 現在只使用普通的主題...

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(); 
+0

後臺線程可以通過使用的AsyncTask來實現。 –

+0

那麼,爲什麼是我的項目運行從SDK 7〜10同樣的錯誤被顯示出來,即使我的目標設定爲15,並與maxSdkVersion – sidG

+0

做的路程,如果我的猜測是正確的<10是確定與主顯示器上運行HTTPConnections線。蜂巢及以上不允許。現在編譯到您的應用程序中的SDK的實際版本是什麼?它仍然是2.x?還是你把它移動到3.x或4.x? –

0

要來拆分StrictMode問題,您需要在您的活動使用下面的代碼 - 的[android.os.NetworkOnMainThreadException]

static{ 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
    } 
相關問題