我有一个单独的类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();
}
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()中使用location时,我得到一个例外。
答案 0 :(得分:1)
您正尝试将经度和纬度设置为非对象。这会创建一个NullPointerException。您必须在使用之前创建ojbect位置。
答案 1 :(得分:1)
但首先,当我在startactivity()中使用location时,我得到一个例外。
Location newLocation;
newLocation.setLatitude(latitude);
newLocation.setLongitude(longitude);
您正在尝试执行上面的代码,但是newLocation
是null
(默认值)并且您尝试使用null
而不是Object,它会导致{{1 }}
要在Java中创建新对象,必须使用:
NullPointerException