0

在 android 模拟器中请求位置更新后,我的应用程序停止工作。这仅适用于 3.0 以上的 android 版本。任何类似以下的代码

lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

该应用程序停止工作。这是这些版本的模拟器中的常规行为还是我做错了什么?

更多信息:如果我启动 android 2.3 或更低版本的模拟器,则会正确捕获异常。这在其他版本中不会发生。

 12-27 19:17:59.183: W/dalvikvm(640): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
 12-27 19:17:59.253: E/AndroidRuntime(640): FATAL EXCEPTION: main
 12-27 19:17:59.253: E/AndroidRuntime(640): android.os.NetworkOnMainThreadException
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at com.rahul.places.AddNewLocation.getUrlArray(AddNewLocation.java:147)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at com.rahul.places.AddNewLocation.access$6(AddNewLocation.java:139)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at com.rahul.places.AddNewLocation$2.onClick(AddNewLocation.java:69)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.view.View.performClick(View.java:4084)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.view.View$PerformClick.run(View.java:16966)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.os.Handler.handleCallback(Handler.java:615)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.os.Handler.dispatchMessage(Handler.java:92)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.os.Looper.loop(Looper.java:137)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at android.app.ActivityThread.main(ActivityThread.java:4745)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at java.lang.reflect.Method.invokeNative(Native Method)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at java.lang.reflect.Method.invoke(Method.java:511)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
 12-27 19:17:59.253: E/AndroidRuntime(640):     at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

0

这是意料之中的。在最近的版本中,Android 在处理 UI 线程上的工作时更加严格。

解决方案是使用处理程序在位置更新可用时更改 UI 线程上的 UI(即在您的 onLocationChanged() 方法中)。

于 2012-12-28T14:41:27.500 回答