Не получается присвоить данные переменной
В методе создания делаю вызов функции getLocation() в которой присваиваю значения (Для дальнейшего использования в других методах) как переменным так и самому List но они не меняются. В чем дело?
String Country, Region;
Double latC,longC;
GoogleMap map;
Geocoder geocoder;
List<Address> addresses;
FusedLocationProviderClient fusedLocationProviderClient;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_map, container, false);
//map
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.rvMap);
mapFragment.getMapAsync(this);
//getLocation
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
//Check permission
if (ActivityCompat.checkSelfPermission(getActivity() // здесь делаю запрос
, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//When permission granted
getLocation();
} else {
//When permission denied
ActivityCompat.requestPermissions(getActivity()
, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
getActivity().onBackPressed();
}
// set has option menu as true because we have menu
setHasOptionsMenu(true);
//set title
getActivity().setTitle(R.string.title_map);
// call view
progressBar = root.findViewById(R.id.progress_circular_country);
nameRegion = root.findViewById(R.id.tvMapRegionName);
TotalCases = root.findViewById(R.id.tvMapTotalCases);
TotalDeaths = root.findViewById(R.id.tvMapTotalDeaths);
TotalRecover = root.findViewById(R.id.tvMapTotalRecovered);
nameRegion.setText(Region); // здесь она пустая
nameRegion.setText(addresses.get(0).getAdminArea()); // а так ошибку кидает что пустой лист
return root;
}
private void getLocation() {
fusedLocationProviderClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
//Initialize location
Location location = task.getResult();
if (location != null) {
try {
//Initialize geoCoder
geocoder = new Geocoder(getActivity(), Locale.US);
//Initialize address list
addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); // здесь список addresses заполнен
latC = addresses.get(0).getLatitude();// здесь присваиваю
longC = addresses.get(0).getLongitude();
Country = addresses.get(0).getCountryName();
Region = addresses.get(0).getAdminArea();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
Ответы (1 шт):
Автор решения: Виталий Перятин
→ Ссылка
Как Вы проверяете изменилось ли значение переменной или нет?
Если Вы проверяете это сразу после вызова getLocation(), то к этому моменту Callback который вы передали в функцию addOnCompleteListener мог просто не успеть вызваться. При изменении переменных внутри колбэка, нужно там же попросить заново обработать эти переменные (а не только сразу после вызова функции getLocation())