如何在 Android 的 OnCompleteListener 中返回值?

Wun*_*Wun 3 android

我正在尝试像以下代码一样获取智能手机的 GPS:

在 中Activity.java,我使用以下代码获取GPS

private GPSClass gps;
gps.getGPSLocation();
Run Code Online (Sandbox Code Playgroud)

GPSClass.java

public void getGPSLocation(){
        FusedLocationProviderClient mLocationClient = LocationServices.getFusedLocationProviderClient(mContext);
        mLocationClient.getLastLocation().addOnCompleteListener(mContext, new OnCompleteListener<Location>() {
            @Override
            public void onComplete(@NonNull Task<Location> task) {
                if(task.isSuccessful()){
                    mLocation = task.getResult();
                    Log.i("getLocation---LOCATION", mLocation.getLatitude() + "/"
                            + mLocation.getLongitude());

                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

但是如何返回值GPSClass.java

我已经尝试更换

public void onComplete
Run Code Online (Sandbox Code Playgroud)

代替

public Location onComplete
Run Code Online (Sandbox Code Playgroud)

但它显示错误

'onComplete(Task<Location>)' in 'Anonymous class derived from com.google.android.gms.tasks.OnCompleteListener' clashes with 'onComplete(Task<TResult>)' in 'com.google.android.gms.tasks.OnCompleteListener'; attempting to use incompatible return type

我错过了什么?如何返回值OnCompleteListener?提前致谢。

Mur*_*göz 5

您可以使用回调,例如

public void getGPSLocation(GPSCallback callback){
        FusedLocationProviderClient mLocationClient = LocationServices.getFusedLocationProviderClient(mContext);
        mLocationClient.getLastLocation().addOnCompleteListener(mContext, new OnCompleteListener<Location>() {
            @Override
            public void onComplete(@NonNull Task<Location> task) {
                if(task.isSuccessful()){
                    mLocation = task.getResult();
                    Log.i("getLocation---LOCATION", mLocation.getLatitude() + "/"
                            + mLocation.getLongitude());
                    callback.onLocation(mLocation);
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

创建一个名为GPSCallbackeg的接口

interface GPSCallback{
void onLocation(Location location);
}
Run Code Online (Sandbox Code Playgroud)

并使用回调调用该方法

gps.getGPSLocation(new GPSCallback() {
    void onLocation(Location location) {
        // do what you need to do with the location
    }
});
Run Code Online (Sandbox Code Playgroud)