【问题标题】:addOnCompleteListener is Unchecked and crashes appaddOnCompleteListener 未选中并导致应用程序崩溃
【发布时间】:2018-09-21 18:59:37
【问题描述】:

我有这个代码:

// Using this method to center MyLocation as default location when app is started
    private void getDeviceLocation() {
        Log.d(TAG, "getDeviceLocation: getting the devices current location");
    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    try {

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            //Request Location Permission
            checkLocationPermission();
        } else {
        final Task location = mFusedLocationClient.getLastLocation();
            location.addOnCompleteListener(this, new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "onComplete: found location!");
                        Location mLastLocation = (Location) task.getResult();

                        // mLastLocation = location;
                        if (mCurrentLocationMarker != null) {
                            mCurrentLocationMarker.remove();
                        }

                        LatLng latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
                        MarkerOptions markerOptions = new MarkerOptions();
                        markerOptions.position(latLng);
                        markerOptions.title("My position");
                        markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.emptyicon));
                        mCurrentLocationMarker = mMap.addMarker(markerOptions);
                        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));

                    } else {
                        Log.d(TAG, "onComplete: current location is null");
                        Toast.makeText(MapsActivity.this, "unable to get current location", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    } catch (SecurityException e) {
        Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage());
    }

这一行:location.addCompleteListener 被 Android Studio 标记为未选中,这会使应用程序崩溃。所以我必须以某种方式让它“检查”。 这发生在 Android Studio 的最新更新补丁之后。

我该如何解决这个问题?

【问题讨论】:

标签: android google-maps geolocation google-maps-markers


【解决方案1】:

尝试改变:

final Task location = mFusedLocationClient.getLastLocation();
    location.addOnCompleteListener(this, new OnCompleteListener() {

到这里:

final Task<Location> location = mFusedLocationClient.getLastLocation();
    location.addOnCompleteListener(this, new OnCompleteListener<Location>() {

【讨论】:

  • 今天晚些时候试试这个!谢谢回答!
  • 当我添加 Task 时,下一行开始出现新的未经检查的警告(this, new OnCompleteListener() {
  • 我刚刚尝试在 Andy 中运行该应用程序,现在它可以工作了,但它仍然有关于未选中 OnCompleteListener 的第二个警告
  • 在将代码粘贴到 Android Studio 并自己查看警告后,我推断您需要添加的只是 &lt;Location&gt; 到您的 OnCompleteListener。查看我的最新编辑。
  • 嗨!我通过使用 onSuccessListener 而不是 onCompleteListener 解决了这个问题。
【解决方案2】:

如果我有 50 多个代表,我会发表评论。

不管怎样,你可以继续使用

.addOnCompleteListener(new OnCompleteListener<Location>(){
});

通过添加 @nope4561759 所说的内容,将 &lt;Location&gt; 添加到 onComplete() 重写方法的 Task 参数中,如下所示:public void onComplete(@NonNull Task&lt;Location&gt; task) {…}

【讨论】:

    【解决方案3】:
     private void getDeviceLocation() {
        Log.d(TAG, "getDeviceLocation: getting the devices current location");
        FusedLocationProviderClient mfusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
        try {
            if (mLocationPermissionGranted) {
                final Task<Location> location = mfusedLocationProviderClient.getLastLocation();
                location.addOnCompleteListener(this, new OnCompleteListener<Location>() {
    
                    @Override
                    public void onComplete(@NonNull Task task) {
                        if (task.isSuccessful()) {
                            Log.d(TAG, "onComplete: found location");
                            try {
                                Location currentLocation = (Location) task.getResult();
                                //globalLatitude = currentLocation.getLatitude();
                                //globalLongitude = currentLocation.getLongitude();
                            } catch (Exception e) {
                                Toast.makeText(getApplicationContext(), "Please turn on your GPS", Toast.LENGTH_SHORT).show();
                            }
                        } else {
                            Log.d(TAG, "onComplete: Location not found");
                            Toast.makeText(MainActivity.this, "Cannot find current location", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        } catch (SecurityException e) {
            Log.e(TAG, "getDeviceLocation: Security Exception" + e.getMessage());
        }
    }
    

    addOnCompleteListener 未选中并导致应用程序崩溃的解决方案。

    【讨论】:

    • 请解释你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2016-06-04
    • 2011-08-24
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多