1

我有一个单独的类 GPSTracker.java,它返回当前的纬度和经度。

public class Live extends Activity implements LocationListener
{   
GPSTracker gps;
Location newLocation = new Location(LocationManager.GPS_PROVIDER);
Location oldLocation = new Location(LocationManager.GPS_PROVIDER);
float distanceTravelled=0;
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_live);
    startactivity();

}

开始活动:

public void startactivity() 
{
    gps = new GPSTracker(Live.this);

    if(gps.canGetLocation())
    {
        double latitude = gps.getLatitude();
        double longitude = gps.getLongitude();
        Toast.makeText(getApplicationContext(), "Your Location is: \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();


        newLocation.setLatitude(latitude);
        newLocation.setLongitude(longitude);    
    }
    else
    {
        gps.showSettingsAlert();
    }

}

每当我执行注释掉的部分时,即使我在 Live 类中声明 startactivity() 之外的位置,它也会给出异常。否则它会显示正确的纬度和经度。

我想用它来计算行驶距离,如下所示:

    @Override
public void onLocationChanged(Location location) 
{

    oldLocation.set(newLocation);
    startactivity();
    distanceTravelled+=newLocation.distanceTo(oldLocation);
    String stringdistance= Float.toString(distanceTravelled);
    TextView distance = (TextView) findViewById(R.id.textDistance);
    distance.setText(stringdistance);
}

这个逻辑正确吗?

并且 onLocationChanged() 在 startactivity() 中没有找到 newLocation。我怎样才能做到这一点?

但首先是当我在 startactivity() 中使用位置时出现异常。

4

2 回答 2

1

但首先是当我在 startactivity() 中使用位置时出现异常。

    Location newLocation;

    newLocation.setLatitude(latitude);
    newLocation.setLongitude(longitude); 

您正在尝试执行上面的代码,但看到newLocationis null(默认值)并且您尝试使用null而不是 Object 并且它导致NullPointerException.

为了在 Java 中创建一个新对象,您必须使用:

Location newLocation = new Location("test");
于 2013-07-10T07:42:04.290 回答
1

您正在尝试将经度和纬度设置为非对象。这会创建一个 NullPointerException。您必须在使用之前创建 ojbect 位置。

于 2013-07-10T07:24:55.203 回答