调用 requestLocationUpdates() 时不能使用 activity 作为 LocationListener 的实例
Can't use an activity as an instance of LocationListener when calling requestLocationUpdates()
在我的应用程序中,连接到 LocationServices.API 后,在 onConnected() 回调中,我启动了一个位置更新请求,问题是 Activity 处理进程(数据Activity) 不被识别为 LocationListener 的实例,它显示错误,并建议转换。
protected void startLocationUpdates() {
PendingResult locationUpdatesResult = LocationServices.FusedLocationApi.requestLocationUpdates(locationGoogleApiClient, locationRequest, (com.google.android.gms.location.LocationListener) this);
}
当我将最后一个参数转换为 (com.google.android.gms.location.LocationListener) 时,IDE 让我编译,但是抛出了 ClassCastException
java.lang.ClassCastException: com.example.[...].DataActivity cannot be cast to com.google.android.gms.location.LocationListener
我真的不知道为什么会这样。
这是 Class 的声明。
public class DataActivity extends FragmentActivity implements LocationListener, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
OnCreate():
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
//Create the GoogleLocationAPI reference
buildGoogleLocationApiClient();
//Create Location Request
createLocationRequest();
//Initialize the mapFragment
initializeMapFragment();
updateUI();
}
其他方法:
protected synchronized void buildGoogleLocationApiClient(){
locationGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
locationGoogleApiClient.connect();
Log.v("**INFO: ", "API CLIENT");
}
protected static void createLocationRequest() {
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000);
locationRequest.setFastestInterval(5000);
Log.i("**INFO: ", "LocationRequest created");
}
protected void initializeMapFragment(){
//Initialize the mapFragment
mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
//When mapFragment is ready...
mapFragment.getMapAsync(this);
}
所以当建立连接(OnConnected)时,我调用这个方法,当错误弹出时。
protected void startLocationUpdates() {
PendingResult locationUpdatesResult = LocationServices.FusedLocationApi.requestLocationUpdates(locationGoogleApiClient, locationRequest, this);
locationUpdatesResult.await();
}
确保您的 DataActivity
实现了 com.google.android.gms.location.LocationListener
而不是 android.location.LocationListener
。
您可能错误地导入了 android.location.LocationListener
。
而不是public class DataActivity extends FragmentActivity implements LocationListener, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
做
public class DataActivity extends FragmentActivity implements **com.google.android.gms.location.LocationListener**, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
之后你必须实现它的所有方法
在我的应用程序中,连接到 LocationServices.API 后,在 onConnected() 回调中,我启动了一个位置更新请求,问题是 Activity 处理进程(数据Activity) 不被识别为 LocationListener 的实例,它显示错误,并建议转换。
protected void startLocationUpdates() {
PendingResult locationUpdatesResult = LocationServices.FusedLocationApi.requestLocationUpdates(locationGoogleApiClient, locationRequest, (com.google.android.gms.location.LocationListener) this);
}
当我将最后一个参数转换为 (com.google.android.gms.location.LocationListener) 时,IDE 让我编译,但是抛出了 ClassCastException
java.lang.ClassCastException: com.example.[...].DataActivity cannot be cast to com.google.android.gms.location.LocationListener
我真的不知道为什么会这样。
这是 Class 的声明。
public class DataActivity extends FragmentActivity implements LocationListener, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
OnCreate():
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
//Create the GoogleLocationAPI reference
buildGoogleLocationApiClient();
//Create Location Request
createLocationRequest();
//Initialize the mapFragment
initializeMapFragment();
updateUI();
}
其他方法:
protected synchronized void buildGoogleLocationApiClient(){
locationGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
locationGoogleApiClient.connect();
Log.v("**INFO: ", "API CLIENT");
}
protected static void createLocationRequest() {
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000);
locationRequest.setFastestInterval(5000);
Log.i("**INFO: ", "LocationRequest created");
}
protected void initializeMapFragment(){
//Initialize the mapFragment
mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
//When mapFragment is ready...
mapFragment.getMapAsync(this);
}
所以当建立连接(OnConnected)时,我调用这个方法,当错误弹出时。
protected void startLocationUpdates() {
PendingResult locationUpdatesResult = LocationServices.FusedLocationApi.requestLocationUpdates(locationGoogleApiClient, locationRequest, this);
locationUpdatesResult.await();
}
确保您的 DataActivity
实现了 com.google.android.gms.location.LocationListener
而不是 android.location.LocationListener
。
您可能错误地导入了 android.location.LocationListener
。
而不是public class DataActivity extends FragmentActivity implements LocationListener, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
做
public class DataActivity extends FragmentActivity implements **com.google.android.gms.location.LocationListener**, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
之后你必须实现它的所有方法