首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传入onLocationChanged的Location对象为空?

传入onLocationChanged的Location对象为空?
EN

Stack Overflow用户
提问于 2010-08-09 04:37:48
回答 3查看 4.1K关注 0票数 0

我有一个在我的应用程序中实现LocationListener的活动,直到最近,我的onLocationChanged方法一直工作得很好。由于某些原因,传入该方法的Location对象为空。我的问题是,为什么它是空的?如果它不能获得一个位置,它会传入一个空对象吗?

我的GPS是开着的,我将它设置为从GPS中提取位置,我知道我的GPS可以定位我,因为我使用地图并让它定位我。

此外,我的应用程序权限设置为:

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

我不认为权限是问题所在,因为我的活动之前是有效的,而且从那时起我就没有更改过权限。

下面是确定location对象的提供者的代码:

代码语言:javascript
复制
String locationProvider = this.mLocationManager.getBestProvider(mLocationCriteria, true);
this.onLocationChanged(this.mLocationManager.getLastKnownLocation(locationProvider));

以下是该错误的LogCat输出:

代码语言:javascript
复制
08-08 18:25:26.310: ERROR/MapActivity(6447): Couldn't get connection factory client
08-08 18:26:18.771: ERROR/AndroidRuntime(6447): Uncaught handler: thread main exiting due to uncaught exception
08-08 18:26:18.880: ERROR/AndroidRuntime(6447): java.lang.IllegalStateException: Could not execute method of the activity
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.View$1.onClick(View.java:2031)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.View.performClick(View.java:2364)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.View.onTouchEvent(View.java:4179)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.View.dispatchTouchEvent(View.java:3709)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.os.Looper.loop(Looper.java:123)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.app.ActivityThread.main(ActivityThread.java:4363)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at java.lang.reflect.Method.invoke(Method.java:521)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at dalvik.system.NativeStart.main(Native Method)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447): Caused by: java.lang.reflect.InvocationTargetException
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.proto.screens.MyMapActivity.onLocateUserClick(MyMapActivity.java:147)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at java.lang.reflect.Method.invoke(Method.java:521)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at android.view.View$1.onClick(View.java:2026)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     ... 21 more
08-08 18:26:18.880: ERROR/AndroidRuntime(6447): Caused by: java.lang.NullPointerException
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     at com.proto.screens.MyMapActivity.onLocationChanged(MyMapActivity.java:135)
08-08 18:26:18.880: ERROR/AndroidRuntime(6447):     ... 25 more

我已经在另一台设备(准确地说是宏达MyTouch 3G )上测试过同样的代码,它在[UPDATE]上运行得天衣无缝,但在我的摩托罗拉Droid上却崩溃了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-11 02:07:07

我已经解决了这个问题,尽管我不确定为什么会这样。

我所做的是将我的活动设置为从最佳位置提供商(在本例中为GPS)请求位置更新,并将其设置为一旦它有一个精确到50米的位置就触发我的函数。我之前所做的只是尝试检索最后一个已知的位置,但现在我将其设置为等待GPS可以得到定位。

也许它没有存储我最后一个已知的位置,因此返回null。

票数 1
EN

Stack Overflow用户

发布于 2010-08-09 05:18:03

我建议您使用调试器运行此应用程序,以找出空指针的原因。如果获取位置的代码块在try块中,您可以在catch中添加断点,异常将很好地告诉您原因是什么(以及如何处理)。

票数 0
EN

Stack Overflow用户

发布于 2012-03-25 03:33:25

我终于弄明白了。在代码中没有任何问题。

只需运行一个应用程序,该应用程序将存储纬度和经度详细信息...SAY,就像您在手机中内置的地图应用程序一样,然后运行它就可以很好地工作...

它给出null的原因是你的手机会存储最后已知的详细信息,堆栈将是空的,因此它会传递一个null。运行类似于地图之类的应用程序会将位置详细信息放入堆栈中,并将其取回。奶酪!@srinivas

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3435978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档