2013-04-11 62 views
-3

我寫一個應用程序中對此我允許用戶輸入他們的詳細資料,但我得到一個錯誤,每當用戶點擊提交按鈕,錯誤說:不幸的是App有停止不幸的是應用程序已停止 - android.os.NetworkOnMainThreadException

android.os.NetworkOnMainThreadException

logcat的說:

04-11 14:25:07.297: E/AndroidRuntime(971): FATAL EXCEPTION: main 
04-11 14:25:07.297: E/AndroidRuntime(971): android.os.NetworkOnMainThreadException 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
04-11 14:25:07.297: E/AndroidRuntime(971): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
04-11 14:25:07.297: E/AndroidRuntime(971): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
04-11 14:25:07.297: E/AndroidRuntime(971): at libcore.io.IoBridge.connect(IoBridge.java:112) 
04-11 14:25:07.297: E/AndroidRuntime(971): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
04-11 14:25:07.297: E/AndroidRuntime(971): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
04-11 14:25:07.297: E/AndroidRuntime(971): at java.net.Socket.connect(Socket.java:842) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
04-11 14:25:07.297: E/AndroidRuntime(971): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
04-11 14:25:07.297: E/AndroidRuntime(971): at com.erachnida.restaurant.versionoct.cart.RegistrationActivity.getHttpPost(RegistrationActivity.java:183) 
04-11 14:25:07.297: E/AndroidRuntime(971): at com.erachnida.restaurant.versionoct.cart.RegistrationActivity.SaveData(RegistrationActivity.java:135) 
04-11 14:25:07.297: E/AndroidRuntime(971): at com.erachnida.restaurant.versionoct.cart.RegistrationActivity$1.onClick(RegistrationActivity.java:49) 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.view.View.performClick(View.java:4202) 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.view.View$PerformClick.run(View.java:17340) 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.os.Handler.handleCallback(Handler.java:725) 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.os.Looper.loop(Looper.java:137) 
04-11 14:25:07.297: E/AndroidRuntime(971): at android.app.ActivityThread.main(ActivityThread.java:5039) 
04-11 14:25:07.297: E/AndroidRuntime(971): at java.lang.reflect.Method.invokeNative(Native Method) 
04-11 14:25:07.297: E/AndroidRuntime(971): at java.lang.reflect.Method.invoke(Method.java:511) 
04-11 14:25:07.297: E/AndroidRuntime(971): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-11 14:25:07.297: E/AndroidRuntime(971): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-11 14:25:07.297: E/AndroidRuntime(971): at dalvik.system.NativeStart.main(Native Method) 
+0

在運行時間過長的android代碼中,不應該在主線程中完成。因此,將您的代碼移入AsyncTask或其他任何方法中以在另一個線程上執行。 – vinoth 2013-04-11 09:05:44

回答

4

在較高版本的Android中,您無法致電主線程中的網絡操作。因此,採取一個工作線程或異步任務來執行網絡操作,如調用Webservice,下載圖像等。

這不允許讓Android應用程序的響應和平滑

0

當你對蜂窩和更高版本的主線程的網絡連接它發生。您應該使用AsyncTask來執行您的所有網絡操作。 AsyncTask在後臺線程上執行您的操作。點擊herehere瞭解AsyncTask

相關問題