Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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 纬度和经度为空_Java_Android_Google Maps - Fatal编程技术网

Java 纬度和经度为空

Java 纬度和经度为空,java,android,google-maps,Java,Android,Google Maps,我正在开发一个应用程序,获取用户的当前位置并将其显示在地图上,以及屏幕上的纬度和经度,目前一切正常,地图显示我的当前位置,以及使用此代码在屏幕上显示纬度和经度 @Override public void onLocationChanged(Location location) { TextView tvLocation = (TextView) findViewById(R.id.tv_location); // Getting latitude of the current

我正在开发一个应用程序,获取用户的当前位置并将其显示在地图上,以及屏幕上的纬度和经度,目前一切正常,地图显示我的当前位置,以及使用此代码在屏幕上显示纬度和经度

@Override
public void onLocationChanged(Location location) {

    TextView tvLocation = (TextView) findViewById(R.id.tv_location);

    // Getting latitude of the current location
    double latitude = location.getLatitude();

    // Getting longitude of the current location
    double longitude = location.getLongitude();

    // Creating a LatLng object for the current location
    LatLng latLng = new LatLng(latitude, longitude);

    // Showing the current location in Google Map
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

    // Zoom in the Google Map
    googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));

    // Setting latitude and longitude in the TextView tv_location
    tvLocation.setText("Latitude:" +  latitude  + ", Longitude:"+ longitude );

}
当我想在服务器上发送此纬度和经度时出现问题,它抛出空指针异常

 01-04 23:27:38.759 29286-29286/io.xgear.geotag E/AndroidRuntime: FATAL
 EXCEPTION: main
  Process: io.xgear.geotag, PID: 29286
  java.lang.NullPointerException
      at io.xgear.geotag.MainActivity$GeoTagTask.<init>(MainActivity.java:234)
      at io.xgear.geotag.MainActivity$1.onClick(MainActivity.java:181)
      at android.view.View.performClick(View.java:4633)
      at android.view.View$PerformClick.run(View.java:19270)
      at android.os.Handler.handleCallback(Handler.java:733)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:146)
      at android.app.ActivityThread.main(ActivityThread.java:5602)
      at java.lang.reflect.Method.invokeNative(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:515)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
      at dalvik.system.NativeStart.main(Native Method)
他给了我错误

我添加的行

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String provider = locationManager.getBestProvider(criteria, true);

        Location location = locationManager.getLastKnownLocation(provider);

内部
GeoTagTask
location对象是不同的对象,也未初始化

    Location location;
    private String lat = Double.toString(location.getLatitude());
    private String lng = Double.toString(location.getLongitude());

内部
GeoTagTask
location对象是不同的对象,也未初始化

    Location location;
    private String lat = Double.toString(location.getLatitude());
    private String lng = Double.toString(location.getLongitude());
问题 问题在
GeoTagTask

Location location;
private String lat = Double.toString(location.getLatitude());
private String lng = Double.toString(location.getLongitude());
您正在访问未初始化的变量

解决方案 将onCreate location设为全局变量

public class MainActivity extends FragmentActivity implements LocationListener {
    Location location;
    void onCreate() {
        ....
        location = locationManager.getLastKnownLocation(provider);
        ....
    }
}
GeoTagTask
中使用全局变量

public class GeoTagTask extends AsyncTask<Void, Void, Boolean> {
        private String lat = Double.toString(location.getLatitude());
        private String lng = Double.toString(location.getLongitude());
        ...
}
公共类GeoTagTask扩展了AsyncTask{
私有字符串lat=Double.toString(location.getLatitude());
私有字符串lng=Double.toString(location.getLongitude());
...
}
问题 问题在
GeoTagTask

Location location;
private String lat = Double.toString(location.getLatitude());
private String lng = Double.toString(location.getLongitude());
您正在访问未初始化的变量

解决方案 将onCreate location设为全局变量

public class MainActivity extends FragmentActivity implements LocationListener {
    Location location;
    void onCreate() {
        ....
        location = locationManager.getLastKnownLocation(provider);
        ....
    }
}
GeoTagTask
中使用全局变量

public class GeoTagTask extends AsyncTask<Void, Void, Boolean> {
        private String lat = Double.toString(location.getLatitude());
        private String lng = Double.toString(location.getLongitude());
        ...
}
公共类GeoTagTask扩展了AsyncTask{
私有字符串lat=Double.toString(location.getLatitude());
私有字符串lng=Double.toString(location.getLongitude());
...
}

我知道这一点,但不知道如何解决:/使位置对象成为全局对象并从
GeoTagTask
中删除。并确保
onLocationChanged
为worksNo,它仍然提供空值。你能检查一下更新吗?我已经编辑了我的帖子。我知道这一点,但我不知道如何修复它/使位置对象成为全局对象并从
GeoTagTask
中删除。并确保
onLocationChanged
为worksNo,它仍然提供空值。你能检查一下更新吗?我已经编辑了我的帖子,我知道它会正常工作,因为我们现在使用的是全局变量,但我只是以防万一。即使位置改变了,它也能正常工作,对吗?(顺便说一句,它现在可以正常工作了,所以我会把它标记为正确:)我知道它会正常工作,因为我们现在使用的是全局变量,但我只是以防万一。即使位置改变了,它也能正常工作,对吗?(顺便说一句,它现在工作正常,所以我会将其标记为正确:))