Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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
Android 谷歌定位API的问题_Android - Fatal编程技术网

Android 谷歌定位API的问题

Android 谷歌定位API的问题,android,Android,我正在使用一个简单的代码,并不断获得 java.lang.NullPointerException:侦听器不能为null 我只使用一个非常简短的代码来尝试获取我的当前位置,但我无法让它工作。它可能必须处理requestLocationUpdates回调中循环器位置的“null”。但我不确定。 我已经试了一整天了 以下是简短的代码: public class MainActivity extends AppCompatActivity { private FusedLocationProvider

我正在使用一个简单的代码,并不断获得

java.lang.NullPointerException:侦听器不能为null

我只使用一个非常简短的代码来尝试获取我的当前位置,但我无法让它工作。它可能必须处理
requestLocationUpdates
回调中循环器位置的“null”。但我不确定。 我已经试了一整天了

以下是简短的代码:

public class MainActivity extends AppCompatActivity {
private FusedLocationProviderClient mFusedLocationClient;
private LocationCallback mLocationCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        //
    } else {
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
                null /* Looper */);
    }

    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Update UI with location data
                TextView tv = (TextView) findViewById(R.id.tv);
                Double latDouble = location.getLatitude();
                String latString = latDouble.toString();
                tv.setText(latString);
            }
        };
    };
}
我只想知道现在的位置,为什么它会让我如此艰难?是什么导致了这个错误


谢谢

您正在尝试在初始化mLocationCallback之前使用它。只需移动此代码:

mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Update UI with location data
                TextView tv = (TextView) findViewById(R.id.tv);
                Double latDouble = location.getLatitude();
                String latString = latDouble.toString();
                tv.setText(latString);
            }
        };
    };
在此之前:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        //
    } else {
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
                null /* Looper */);
    }

循环器线程中的null与此无关。通过将其传递为null,您可以将回调保留在调用线程上。

您试图在初始化之前使用mLocationCallback。只需移动此代码:

mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Update UI with location data
                TextView tv = (TextView) findViewById(R.id.tv);
                Double latDouble = location.getLatitude();
                String latString = latDouble.toString();
                tv.setText(latString);
            }
        };
    };
在此之前:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        //
    } else {
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,
                null /* Looper */);
    }

循环器线程中的null与此无关。通过将其传递为null,您可以将回调保留在调用线程上。

请在问题上添加完整的logcat请在问题上添加完整的logcat谢谢,成功了!。顺便说一句,将其保留为空与键入
Looper.mylooper()
之间有什么区别?我很高兴它能工作。如果它不为null,则必须为其提供自己的自定义实现。例如在一个单独的线程上运行它。谢谢,它成功了!。顺便说一句,将其保留为空与键入
Looper.mylooper()
之间有什么区别?我很高兴它能工作。如果它不为null,则必须为其提供自己的自定义实现。比如在一个单独的线程上运行它。