2

在我的应用程序中,连接到 LocationServices.API 后,在 onConnected() 回调中,我启动了一个位置更新请求,问题是处理进程的 Activity (DataActivity) 未被识别为 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 无法转换为 com.google.android.gms.location.LocationListener

我真的不知道为什么会这样。

这是班级宣言。

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(); 
}
4

2 回答 2

16

确保你的DataActivity工具com.google.android.gms.location.LocationListener,而不是android.location.LocationListener
您可能android.location.LocationListener错误地导入了。

于 2015-04-21T19:15:40.583 回答
0

代替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{

之后你必须实现它的所有方法

于 2017-11-20T17:49:08.037 回答