传感器模拟器的NetworkOnMainThreadException [英] Sensor simulator's NetworkOnMainThreadException

查看:139
本文介绍了传感器模拟器的NetworkOnMainThreadException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跟着这个指令使用传感器模拟器调试模拟器上我的应用程序:
http://$c$c.google.com/p/openintents/wiki/SensorSimulator#How_to_use_the_in_your_application

I followed this instruction to debug my app on emulator using sensor simulator: http://code.google.com/p/openintents/wiki/SensorSimulator#How_to_use_the_in_your_application

我完成了上述所有步骤,但对我来说一切都没有在说明书中描述的那样简单。我想NetworkOnMainThreadException所以我创建异步任务来解决这一问题进行连接,注册监听器等。现在,我有以下几点:

I completed all steps above, but in my case everything was not as simple as described in instructions. I got NetworkOnMainThreadException trying to connect, register listener etc. So I created async task to solve this problem. Now, I have the following:

连接仿真器:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    sensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
        this.new ConnectToSimulator().execute();
    }

onResume()听者的注册:

onResume() listner's registration:

@Override
public void onResume() {
    super.onResume();
    this.new RegisterToSimulator().execute();       
}

终于我的任务:

class ConnectToSimulator extends AsyncTask<Object, Object, Object> {   
    @Override
    protected Object doInBackground(Object... arg0) {
        try{
        sensorManager.connectSimulator();
        }catch(Exception e)
        {
            Log.i("error", e.getMessage());
        }
        return null;
    }       
}

class RegisterToSimulator extends AsyncTask<Object, Object, Object> {      
    @Override
    protected Object doInBackground(Object... arg0) {
        try{
            sensorManager.registerListener(Compass.this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
            sensorManager.registerListener(Compass.this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_FASTEST);
            sensorManager.registerListener(Compass.this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_FASTEST);
        }catch(Exception e)
        {
            Log.i("error", e.getMessage());
        }
        return null;
    }

}

但即使在那之后,我仍然收到错误试图发动对模拟器的应用程序:

but even after that, I still receive the error trying to launch app on emulator:

14 12-15:23:28.877:E / AndroidRuntime(3724):致命异常:主要
  12-15 14:23:28.877:E / AndroidRuntime(3724):android.os.NetworkOnMainThreadException
  12-15 14:23:28.877:E / AndroidRuntime(3724):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在libcore.io.IoBridge.recvfrom(IoBridge.java:513)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:46)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.net.PlainSocketImpl $ PlainSocketInputStream.read(PlainSocketImpl.java:240)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.io.InputStreamReader.read(InputStreamReader.java:244)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.io.BufferedReader.fillBuf(BufferedReader.java:130)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.io.BufferedReader.readLine(BufferedReader.java:354)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在org.openintents.sensorsimulator.hardware.SensorSimulatorClient.readSensor(SensorSimulatorClient.java:654)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在org.openintents.sensorsimulator.hardware.SensorSimulatorClient.readSensor(SensorSimulatorClient.java:571)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在org.openintents.sensorsimulator.hardware.SensorSimulatorClient.access$1000(SensorSimulatorClient.java:53)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在org.openintents.sensorsimulator.hardware.SensorSimulatorClient$1.handleMessage(SensorSimulatorClient.java:505)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在android.os.Handler.dispatchMessage(Handler.java:99)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在android.os.Looper.loop(Looper.java:137)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在android.app.ActivityThread.main(ActivityThread.java:5039)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.lang.reflect.Method.invokeNative(本机方法)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在java.lang.reflect.Method.invoke(Method.java:511)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  12-15 14:23:28.877:E / AndroidRuntime(3724):在dalvik.system.NativeStart.main(本机方法)

12-15 14:23:28.877: E/AndroidRuntime(3724): FATAL EXCEPTION: main 12-15 14:23:28.877: E/AndroidRuntime(3724): android.os.NetworkOnMainThreadException 12-15 14:23:28.877: E/AndroidRuntime(3724): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 12-15 14:23:28.877: E/AndroidRuntime(3724): at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163) 12-15 14:23:28.877: E/AndroidRuntime(3724): at libcore.io.IoBridge.recvfrom(IoBridge.java:513) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.io.InputStreamReader.read(InputStreamReader.java:244) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.io.BufferedReader.fillBuf(BufferedReader.java:130) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.io.BufferedReader.readLine(BufferedReader.java:354) 12-15 14:23:28.877: E/AndroidRuntime(3724): at org.openintents.sensorsimulator.hardware.SensorSimulatorClient.readSensor(SensorSimulatorClient.java:654) 12-15 14:23:28.877: E/AndroidRuntime(3724): at org.openintents.sensorsimulator.hardware.SensorSimulatorClient.readSensor(SensorSimulatorClient.java:571) 12-15 14:23:28.877: E/AndroidRuntime(3724): at org.openintents.sensorsimulator.hardware.SensorSimulatorClient.access$1000(SensorSimulatorClient.java:53) 12-15 14:23:28.877: E/AndroidRuntime(3724): at org.openintents.sensorsimulator.hardware.SensorSimulatorClient$1.handleMessage(SensorSimulatorClient.java:505) 12-15 14:23:28.877: E/AndroidRuntime(3724): at android.os.Handler.dispatchMessage(Handler.java:99) 12-15 14:23:28.877: E/AndroidRuntime(3724): at android.os.Looper.loop(Looper.java:137) 12-15 14:23:28.877: E/AndroidRuntime(3724): at android.app.ActivityThread.main(ActivityThread.java:5039) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.lang.reflect.Method.invokeNative(Native Method) 12-15 14:23:28.877: E/AndroidRuntime(3724): at java.lang.reflect.Method.invoke(Method.java:511) 12-15 14:23:28.877: E/AndroidRuntime(3724): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-15 14:23:28.877: E/AndroidRuntime(3724): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-15 14:23:28.877: E/AndroidRuntime(3724): at dalvik.system.NativeStart.main(Native Method)

有人可以解释,为什么我有这么奇怪的错误?此外还有约异步任务使用的必要性模拟器指令没有资料,也许我做错了什么。请帮帮忙,先谢谢了。

Can someone clarify why I have so strange error? moreover there is no info in simulator instruction about async task usage necessity, maybe I am doing something wrong. Please help, thanks in advance.

推荐答案

不幸的是这个错误不能被忽略,因为库未实现的有
新的SDK的限制。

Unfortunately this error cannot be bypassed because library is not implemented having "new" SDK limits.

简单的办法是在明显的蜂巢之前设置的minSdkVersion的东西
(例如安卓的minSdkVersion =8)。

Simplest solution is to set minSdkVersion in manifest to something before Honeycomb (e.g. android:minSdkVersion="8").

立信因为这是,虽然你没有连接在后台线程,你还是创建
反对你的UI线程,这意味着回报会SensorSimulatorClient使用套接字
在你的UI线程通信。

Reson for this is, although you did connected on background thread, you still created object on your UI thread, which in return means SensorSimulatorClient will use socket communication on your UI thread.

这篇关于传感器模拟器的NetworkOnMainThreadException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆