[Android]如何在点击按钮时将当前位置设置为位置对象?

时间:2013-09-29 10:54:22

标签: android onclick gps location

我试图在点击按钮时将当前位置设置为对象。但是当我点击按钮时,我收到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

1 个答案:

答案 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;
   }
}