Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 声明位置时的运行时异常-Android_Java_Android_Eclipse_Gps_Location - Fatal编程技术网

Java 声明位置时的运行时异常-Android

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

我有一个单独的类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()之外声明了位置。否则,它将显示正确的纬度和经度

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提供程序);