我试图获得智能手机的全球定位系统,如下代码所示:
在Activity.java
中,我使用以下代码获取GPS。
private GPSClass gps;
gps.getGPSLocation();
在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());
}
}
});
}
但是如何在GPSClass.java
中返回值呢?
我已经试着替换
public void onComplete
而不是
public Location onComplete
但它显示了错误
'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
中返回值?提前谢谢。
发布于 2018-09-20 08:51:57
您可以使用回调。
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);
}
}
});
}
创建一个名为GPSCallback
的接口。
interface GPSCallback{
void onLocation(Location location);
}
并使用回调调用该方法。
gps.getGPSLocation(new GPSCallback() {
void onLocation(Location location) {
// do what you need to do with the location
}
});
发布于 2018-09-20 08:53:11
这是因为您有一个回调系统,并且不能将直接返回方法与回调混合在一起。
您似乎想要一个直接给出位置的简单方法,但正如您所看到的,FusedLocationProviderClient.getLastLocation()
返回一个Task
,而不是一个直接值。因此,当使用getGPSLocation()
调用方法时,必须等待任务完成才能检索值。
如果您想要一个简单的解决方案,可以在您的活动中直接调用FusedLocationProviderClient
,而不是创建另一个类:
public class MyActivity extends Activity {
private FusedLocationProviderClient mLocationClient;
@Override
protected void onCreate(){
mLocationClient = LocationServices.getFusedLocationProviderClient(mContext);
mLocationClient.getLastLocation().addOnCompleteListener(mContext, new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
if(task.isSuccessful()){
handleLocation(task.getResult();
}
}
});
}
private void handleLocation(Location location){
//Do your handling here
}
}
https://stackoverflow.com/questions/52420903
复制相似问题