Java 声明位置时的运行时异常-Android
我有一个单独的类GPSTracker.java,它返回当前的纬度和经度Java 声明位置时的运行时异常-Android,java,android,eclipse,gps,location,Java,Android,Eclipse,Gps,Location,我有一个单独的类GPSTracker.java,它返回当前的纬度和经度 public class Live extends Activity implements LocationListener { GPSTracker gps; Location newLocation = new Location(LocationManager.GPS_PROVIDER); Location oldLocation = new Location(LocationManager.GPS_PROVIDE
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()之外声明了位置。否则,它将显示正确的纬度和经度
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();
}
我想用它来计算行驶距离,如下所示:
@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()中找不到新位置。我该怎么做
但首先,当我在startactivity()中使用location时,会出现异常。您试图将经度和纬度设置为非对象。这将创建一个NullPointerException。您必须先创建ojbect位置,然后才能使用它 但首先,当我在startactivity()中使用location时,会遇到一个异常 您试图执行上述代码,但请参见
newLocation
为null
(默认值),并且您试图使用null
而不是Object,这会导致NullPointerException
要在Java中创建新对象,必须使用:
Location newLocation = new Location("test");
地点新地点;不会吗?您编写了:Location newLocation=null。所以这个变量的引用是空的。您必须创建一个新的Location对象,如下所示:Location newLocation=newLocation([provider])噢,谢谢!那onLocationChanged()部分正确吗?它能告诉我旅行的距离吗?代码更新谢谢!代码已经更新!onLocationChanged()部分正确吗?它能告诉我行驶的距离吗?不,与您使用oldLocation.set(newLocation)时遇到的问题相同;没有对象创建我已经在类中创建了对象。现在没有例外,但我没有测试距离是否在变化//默认情况下,oldLocation=null;现在您正在使用oldLocation.set(newLocation);这意味着您试图使用null而不是object,因此它将抛出NPE。如果要使用全局对象,即oldLocation,请从onLocationChanged中删除位置oldLocation。否请刷新,我已创建对象位置newLocation=新位置(LocationManager.GPS\U PROVIDER);Location oldLocation=新位置(LocationManager.GPS\U提供程序);