-1

我正在尝试通过单击按钮将当前位置设置为对象。但是,当我单击按钮时,我收到了 ANR 错误。这是我正在谈论的按钮的 onClick 方法,其中destinationObj 被声明为全局并且是Location 类型。请帮帮我。

 public void onClick(View v){

    double lat, lon;
    lat=destinationObj.getLatitude();
    lon=destinationObj.getLongitude();
    destinationObj.setLatitude(lat);
    destinationObj.setLongitude(lon);


}

和日志猫:

在 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 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 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

4

1 回答 1

0

destinationObj.setLatitude(destinationObj.getLatitude()); 这没有意义吗?

对于 setter 和 getter,destinationObj 是同一个对象。左侧应该是一个 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;
   }
}
于 2013-09-29T11:16:18.560 回答