Не получается присвоить данные переменной

В методе создания делаю вызов функции 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())

→ Ссылка