我制作了一个小应用程序,已经运行了几个月,但突然间我得到了一个
android.os.NetworkOnMainThreadException
我没有更改任何代码,这是崩溃的行
try {
endPoint = InetAddress.getByName(target.getToIp());
port = target.getPort();
socket = new DatagramSocket();
}
catch(Exception e) {
}
请注意,我没有发送任何东西,我只是在创建实例,它已经在 InetAddress 行上中断了。
昨晚一直戴着,我在手机上所做的只是在Google play上运行更新,它更新到最新版本的Google Maps,但这与它有什么关系吗?
它可以在模拟器中运行,只有我的 HTC One X 坏了
完整代码在这里 https://github.com/AndersMalmgren/FreePIE/tree/master/Lib/Android/FreePIE%20Android%20IMU
编辑:清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.freepie.android.imu"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
尝试将问题代码移至线程,现在它不会中断,但套接字设置为空。
running = true;
worker = new Thread(new Runnable() {
public void run(){
try {
endPoint = InetAddress.getByName(target.getToIp());
port = target.getPort();
socket = new DatagramSocket();
}
catch(Exception e) {
Exception err = e;
}
while(running) {
try {
sync.await();
} catch(Exception e) {}
Send();
}
try {
socket.disconnect();
}
catch(Exception e) {}
}
});
worker.start();
更新: 如果用户键入 DNS 而不是 IP,解决方案是添加一些故障回复 https://github.com/AndersMalmgren/FreePIE/commit/e8017e02a7893d9df41e4ed67a037f016b6a7d39