2017-01-26 7 views
-1

hereの例を使用してAndroid Wear 2.0デバイスの場所を取得しようとしています。私がインポートされている:Android Wear:MainActivityはcom.google.android.gms.location.LocationListenerにキャストできません

com.google.android.gms.location.LocationListener 
com.google.android.gms.location.LocationRequest 
com.google.android.gms.location.LocationServices 

しかし、私はエラーが発生します:

01-26 00:08:24.508 15589-15589/? E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.buschecker.williamvenner.buschecker, PID: 15589 
java.lang.ClassCastException: com.buschecker.williamvenner.buschecker.MainActivity$4 cannot be cast to com.google.android.gms.location.LocationListener 
    at com.buschecker.williamvenner.buschecker.MainActivity.onConnected(MainActivity.java:166) 
    at com.google.android.gms.common.internal.zzm.zzq(Unknown Source) 
    at com.google.android.gms.internal.zzaal.zzo(Unknown Source) 
    at com.google.android.gms.internal.zzaaj.zzvE(Unknown Source) 
    at com.google.android.gms.internal.zzaaj.onConnected(Unknown Source) 
    at com.google.android.gms.internal.zzaan.onConnected(Unknown Source) 
    at com.google.android.gms.internal.zzzy.onConnected(Unknown Source) 
    at com.google.android.gms.common.internal.zzl$1.onConnected(Unknown Source) 
    at com.google.android.gms.common.internal.zzf$zzj.zzwZ(Unknown Source) 
    at com.google.android.gms.common.internal.zzf$zza.zzc(Unknown Source) 
    at com.google.android.gms.common.internal.zzf$zza.zzu(Unknown Source) 
    at com.google.android.gms.common.internal.zzf$zze.zzxa(Unknown Source) 
    at com.google.android.gms.common.internal.zzf$zzd.handleMessage(Unknown Source) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

私は本当に私がcom.google.android.gms.location.LocationServicesをインポートするよ、私はandroid.location.LocationServicesをインポートしていないよ、何をするか分からないので、それはdoesnのGoogleのグーグルが2つのライブラリを切り替えるように指示しているので、なぜこのエラーが表示されるのかはわかりません。あなたがラインthisがあなたのMainActivityある

requestLocationUpdates(mGoogleApiClient, locationRequest, this) 

を使用

package com.buschecker.williamvenner.buschecker; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v4.app.ActivityCompat; 
import android.support.wearable.activity.WearableActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.Result; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.location.LocationListener; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 

public class MainActivity extends WearableActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

    private String TransportAPI_ID = "XXX"; 
    private String TransportAPI_Key = "XXX"; 

    private GoogleApiClient mGoogleApiClient; 

    private ListView bus_stops; 
    private ArrayAdapter<String> bus_stops_adapter; 

    @Override 
    protected void onStart() { 
     mGoogleApiClient.connect(); 
     super.onStart(); 
    } 

    @Override 
    protected void onStop() { 
     mGoogleApiClient.disconnect(); 
     super.onStop(); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 

     setContentView(R.layout.activity_main); 
     setAmbientEnabled(); 

     bus_stops = (ListView)findViewById(R.id.bus_stop_list); 

     String[] items = {"Loading..."}; 
     bus_stops_adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items); 
     bus_stops.setAdapter(bus_stops_adapter); 
     bus_stops.setClickable(true); 
     bus_stops.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
       Object o = bus_stops.getItemAtPosition(position); 

      } 
     }); 
    } 

    @Override 
    public void onEnterAmbient(Bundle ambientDetails) { 
     super.onEnterAmbient(ambientDetails); 
     updateDisplay(); 
    } 

    @Override 
    public void onUpdateAmbient() { 
     super.onUpdateAmbient(); 
     updateDisplay(); 
    } 

    @Override 
    public void onExitAmbient() { 
     updateDisplay(); 
     super.onExitAmbient(); 
    } 

    private void updateDisplay() { 
     if (isAmbient()) { 

     } else { 

     } 
    } 

    /*private void updateLocation() { 
     if (mLastLocation != null) { 
      Log.println(Log.INFO,"Log","Got location successfully!"); 
      Log.println(Log.INFO, "LOG", bus_stops_adapter.toString()); 

      RequestQueue queue = Volley.newRequestQueue(this); 
      String url = "http://transportapi.com/v3/uk/bus/stops/near.json?lat=" + mLastLocation.getLatitude() + "&lon=" + mLastLocation.getLongitude() + "&app_key=" + TransportAPI_Key + "&app_id=" + TransportAPI_ID; 

      StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 
        Log.println(Log.INFO, "Log", "SUCCESSFULLY GOT API THING"); 
       } 

      }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.println(Log.INFO, "Log", "FAILED??"); 
       } 

      }); 
      queue.add(stringRequest); 
     } else { 
      Log.println(Log.INFO,"Log","Failed to get location!"); 
     } 
    }*/ 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},2542); 
      return; 
     } 

     LocationRequest locationRequest = LocationRequest.create() 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(60) 
       .setFastestInterval(30); 

     LocationServices.FusedLocationApi 
       .requestLocationUpdates(mGoogleApiClient, locationRequest, this) 
       .setResultCallback(new ResultCallback() { 

        @Override 
        public void onResult(@NonNull Result result) { 
         if (result.getStatus().isSuccess()) { 
          Log.println(Log.INFO,"Log","It worked??"); 
         } else { 
          Log.println(Log.INFO,"Log","It failed??"); 
         } 
        } 
       }); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (mGoogleApiClient.isConnected()) { 
      LocationServices.FusedLocationApi 
        .removeLocationUpdates(mGoogleApiClient, this); 
     } 
     mGoogleApiClient.disconnect(); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Log.println(Log.INFO,"Log","Connection suspended"); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.println(Log.INFO,"Log","Connection failed"); 
    } 
} 

答えて

2

は、ここに私の完全なコードです。ただし、per the documentationの3番目のパラメータはLocationListenerである必要があります。MainActivityは実装していません。

インターフェイスを実装し、onLocationChangedメソッドをオーバーライドする必要があります。

public class MainActivity extends WearableActivity implements 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener, 
    LocationListener { 

    @Override 
    public void onLocationChanged (Location location) { 
    // Do something with the location 
    } 

... 
} 
関連する問題