我试图在点击按钮时将当前位置设置为对象。但是当我点击按钮时,我收到ANR错误。这是我正在讨论的按钮的onClick方法,其中destinationObj被声明为global,类型为Location。请帮帮我。
public void onClick(View v){
double lat, lon;
lat=destinationObj.getLatitude();
lon=destinationObj.getLongitude();
destinationObj.setLatitude(lat);
destinationObj.setLongitude(lon);
}
和logcat:
09-29 10:44:02.456:E / AndroidRuntime(14449):致命异常:主要 09-29 10:44:02.456:E / AndroidRuntime(14449):java.lang.IllegalStateException:无法执行活动的方法 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.view.View $ 1.onClick(View.java:3599) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.view.View.performClick(View.java:4204) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.view.View $ PerformClick.run(View.java:17355) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.os.Handler.handleCallback(Handler.java:725) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.os.Handler.dispatchMessage(Handler.java:92) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.os.Looper.loop(Looper.java:137) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.app.ActivityThread.main(ActivityThread.java:5041) 09-29 10:44:02.456:E / AndroidRuntime(14449):at java.lang.reflect.Method.invokeNative(Native Method) 09-29 10:44:02.456:E / AndroidRuntime(14449):at java.lang.reflect.Method.invoke(Method.java:511) 09-29 10:44:02.456:E / AndroidRuntime(14449):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 09-29 10:44:02.456:E / AndroidRuntime(14449):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 09-29 10:44:02.456:E / AndroidRuntime(14449):at dalvik.system.NativeStart.main(Native Method) 09-29 10:44:02.456:E / AndroidRuntime(14449):引起:java.lang.reflect.InvocationTargetException 09-29 10:44:02.456:E / AndroidRuntime(14449):at java.lang.reflect.Method.invokeNative(Native Method) 09-29 10:44:02.456:E / AndroidRuntime(14449):at java.lang.reflect.Method.invoke(Method.java:511) 09-29 10:44:02.456:E / AndroidRuntime(14449):在android.view.View $ 1.onClick(View.java:3594) 09-29 10:44:02.456:E / AndroidRuntime(14449):... 11更多 09-29 10:44:02.456:E / AndroidRuntime(14449):引起:java.lang.NullPointerException 09-29 10:44:02.456:E / AndroidRuntime(14449):at com.example.user.MainActivity.onClick(MainActivity.java:130) 09-29 10:44:02.456:E / AndroidRuntime(14449):... 14更多 09-29 10:44:04.088:I / Process(14449):发送信号。 PID:14449 SIG:9
答案 0 :(得分:0)
destinationObj.setLatitude(destinationObj.getLatitude());这没有意义吗?
destinationObj是setter和getter的同一个对象。左侧应该是TextView或您想要告诉当前位置的任何内容。
如果你的setLatitude实现如下:
this.latitude = getLatitude();
代码将进入一个循环,不断设置纬度变量。
请尝试遵循本指南: http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/
在指南中执行以下操作:
@Override
public void onLocationChanged(Location location) {
if ((this.location = location) == null)
return;
}
然后在您的GPSTracker实例上,让我们打电话,gps,打电话:
gps.getLatitude();
gps.getLongitude();
从GPS获取最新收到的位置(通知将读取相同的值,直到gps单位结算)
如果你真的需要一个Location对象,那么你可以自己实现一个getter:
public class GPSTracker ...
...
public Location getLastLocation() {
return this.location;
}
}