Я пытаюсь реализовать Fused Location API
в службе. Я сделал следующее кодирование, но я получаю ошибку следующим образом:GoogleApiClient предоставляет нулевой указатель, даже когда контекст передается ему при использовании Fuse Location API в android
java.lang.RuntimeException: Unable to instantiate service com.locate.LocationDetails: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Looper android.content.Context.getMainLooper()' on a null object reference
в следующей строке кода:
mGoogleApiClient = new GoogleApiClient.Builder(LocationDetails.this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(LocationDetails.this)
.addApi(LocationServices.API)
.build();
Мой код выглядит следующим образом:
public class LocationDetails extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
Broadcaster broadcaster;
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
public LocationDetails() {
// super();
mGoogleApiClient = new GoogleApiClient.Builder(getBaseContext())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
/* mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000) // 10 seconds, in milliseconds
.setFastestInterval(1 * 1000);*/
Log.i("Service", "Started");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public void onConnected(Bundle bundle) {
Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (location == null) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, (com.google.android.gms.location.LocationListener) this);
} else {
handleNewLocation(location);
}
}
@Override
public void onConnectionSuspended(int i) {
Log.i("Connection", "Suspended");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (connectionResult.hasResolution()) {
try {
connectionResult.startResolutionForResult((Activity) getBaseContext(), CONNECTION_FAILURE_RESOLUTION_REQUEST);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
} else {
Log.i("connection err", "Location services connection failed with code " + connectionResult.getErrorCode());
}
}
private void handleNewLocation(Location location) {
double currentLatitude = location.getLatitude();
double currentLongitude = location.getLongitude();
LatLng latLng = new LatLng(currentLatitude, currentLongitude);
Log.i("location", "" + latLng);
}
@Override
public void onLocationChanged(Location location) {
Log.i("On Changd Location", "" + location.getLatitude());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Log.i("Provider", provider);
}
@Override
public void onProviderDisabled(String provider) {
}
}
I я прохожу context
, но все же NullPointer Exception
.
Может ли кто-нибудь сказать мне, как исправить эту ошибку и исправить код mt, а во-вторых, я сомневаюсь, что можно использовать fused location api
с обслуживанием или нет?
Try 'getApplicationContext()' для получения контекста в процессе эксплуатации. –
Это дает мне ту же ошибку. –
В классе активности? – Piyush