Основная проблема заключается в том, что ваш метод private String getLocation()
возвращает до того, как какое-либо местоположение действительно станет доступным (и я почти уверен, что оно не скомпилируется при просмотре).
Когда вы здесь:
if (ActivityCompat.checkSelfPermission( ShowOutletParams.this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( ShowOutletParams.this, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED) {
return;
}
вы все еще находитесь в стандартном потоке вашего метода.Но как только вы пройдете здесь:
client.getLastLocation().addOnSuccessListener(
весь код в вашем public void onSuccess(Location location)
теперь выполняется ПОСЛЕ ваш вызов getLocation()
уже возвращен!
Простое решение состоит в том, чтобы передать обратные вызовы в ваш метод getLocation()
, чтобы они могли быть вызваны после , когда метод уже вернулся к своему вызывающему, например,
public interface LocationAvailableListener {
public void onLocationAvailable(Location location)
}
public void getLocation(LocationAvailableListener locationAvaialbleCallback, Runnable locationNotAvailableCallback) {
...
Тогда, когдапроверяя разрешения, теперь вы можете вызвать ваш сбой обратного вызова:
if (ActivityCompat.checkSelfPermission( ShowOutletParams.this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( ShowOutletParams.this, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED) {
locationNotAvailableCallback.run();
return;
}
, а затем в вашем onSuccess
if (location != null) {
locationAvaialbleCallback.onLocationAvailable(location);
}
else {
locationNotAvailableCallback.run();
}
И затем использовать:
getLocation(
location -> {
String latitude = String.valueOf(location.getLatitude());
String longitude = String.valueOf(location.getLongitude());
// Add to your ArrayList here
// Save to your database or wherever for later
},
{ Log.i(TAG, "Failed to get Location"); })
А поскольку вы спрашивали о сохранении данных о местоположении, как только они у вас есть, эта ссылка должна указать вам правильное направление с помощью простой сериализации JSON.