This question already has answers here:
How to fix 'android.os.NetworkOnMainThreadException'?
(59个回答)
7年前关闭。
我有一个正在处理的应用程序,当我第一次创建该应用程序时,清单文件已指定了
接下来,我将主题更改为holo dark,使其正常工作,然后将uses-sdk更改为
现在,应用程序崩溃了,但是只有当我尝试登录时,其他屏幕才能正常工作。
目录显示
如果我将uses-sdk改回,则该应用程序将再次运行,但不会显示全黑。
有任何想法吗 ?谢谢
编辑-这是我的清单文件
(59个回答)
7年前关闭。
我有一个正在处理的应用程序,当我第一次创建该应用程序时,清单文件已指定了
<uses-sdk android:minSdkVersion="8"/>
。我可以针对mysql / php网络服务器成功登录。接下来,我将主题更改为holo dark,使其正常工作,然后将uses-sdk更改为
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"
android:maxSdkVersion="18"/>
现在,应用程序崩溃了,但是只有当我尝试登录时,其他屏幕才能正常工作。
目录显示
09-19 09:06:30.872: W/dalvikvm(835): threadid=1: thread exiting with uncaught exception (group=0x41465700)
09-19 09:06:30.912: E/AndroidRuntime(835): FATAL EXCEPTION: main
09-19 09:06:30.912: E/AndroidRuntime(835): android.os.NetworkOnMainThreadException
09-19 09:06:30.912: E/AndroidRuntime(835): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
09-19 09:06:30.912: E/AndroidRuntime(835): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
09-19 09:06:30.912: E/AndroidRuntime(835): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
09-19 09:06:30.912: E/AndroidRuntime(835): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-19 09:06:30.912: E/AndroidRuntime(835): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-19 09:06:30.912: E/AndroidRuntime(835): at java.net.Socket.connect(Socket.java:842)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-19 09:06:30.912: E/AndroidRuntime(835): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-19 09:06:30.912: E/AndroidRuntime(835): at library.JSONParser.getJSONFromUrl(JSONParser.java:42)
09-19 09:06:30.912: E/AndroidRuntime(835): at library.UserFunctions.loginUser(UserFunctions.java:41)
09-19 09:06:30.912: E/AndroidRuntime(835): at com.test.testapp.LoginActivity$1.onClick(LoginActivity.java:56)
09-19 09:06:30.912: E/AndroidRuntime(835): at android.view.View.performClick(View.java:4240)
09-19 09:06:30.912: E/AndroidRuntime(835): at android.view.View$PerformClick.run(View.java:17721)
09-19 09:06:30.912: E/AndroidRuntime(835): at android.os.Handler.handleCallback(Handler.java:730)
09-19 09:06:30.912: E/AndroidRuntime(835): at android.os.Handler.dispatchMessage(Handler.java:92)
09-19 09:06:30.912: E/AndroidRuntime(835): at android.os.Looper.loop(Looper.java:137)
09-19 09:06:30.912: E/AndroidRuntime(835): at android.app.ActivityThread.main(ActivityThread.java:5103)
09-19 09:06:30.912: E/AndroidRuntime(835): at java.lang.reflect.Method.invokeNative(Native Method)
09-19 09:06:30.912: E/AndroidRuntime(835): at java.lang.reflect.Method.invoke(Method.java:525)
09-19 09:06:30.912: E/AndroidRuntime(835): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-19 09:06:30.912: E/AndroidRuntime(835): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-19 09:06:30.912: E/AndroidRuntime(835): at dalvik.system.NativeStart.main(Native Method)
如果我将uses-sdk改回,则该应用程序将再次运行,但不会显示全黑。
有任何想法吗 ?谢谢
编辑-这是我的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.testapp"
android:versionCode="1"
android:versionName="1.0" >
<!-- Allow to connect with internet -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="18"
android:maxSdkVersion="18"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".FirstRunActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Login Activity -->
<activity
android:label="@string/app_name"
android:name=".LoginActivity"></activity>
<!-- Register Activity -->
<activity
android:label="@string/app_name"
android:name=".RegisterActivity"></activity>
<!-- Register Device Activity -->
<activity
android:label="@string/app_name"
android:name=".RegisterDeviceActivity"></activity>
<!-- Dashboard Activity -->
<activity
android:label="@string/app_name"
android:name=".DashboardActivity"></activity>
</application>
</manifest>
最佳答案
当应用程序尝试在其主线程上执行联网操作时引发的异常。
仅针对面向Honeycomb SDK或更高版本的应用程序抛出此错误。允许以较早版本的SDK为目标的应用程序在其主事件循环线程上进行联网,但不建议这样做。
参考:NetworkOnMainThreadException
并阅读Connecting to the Network
您正在从主线程调用与网络相关的东西。在另一个线程中使用那些方法。
阅读有关How to fix android.os.NetworkOnMainThreadException?的更多信息