LocationManager. Объект типа location не помещается в строку

Цель: добавить в приложение функционал гео локации > пользователь мог по нажатию кнопки определить свое местоположение > сохранить эти данные в TextView для дальнейшей с ними работы. Для этого создан отдельный само писный метод setUpLocationListener,вызываемый в главном Activity. Класс MyLocationListener работает для получения ссылку на объект типа location, в виде набора координат типа double > конвертируемые в строку > строка отображается в TextView. Проблема: в моменте преобразования данных с объекта location в строку на выходе получаю null на экране при тесте. Подскажите пожалуйста, в чем может быть проблема.

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class MyLocationListener implements LocationListener {

/**
 * @param myPosition - переменная типа Location, для сохранения данных о геолокации, получаемых через объект
 * LocationManager в методе requestPermission
 * @param PERMISSION_REQUEST - обязательная проверка в requestPermissions
 * @param city - сохраняем координаты из объекта Location в строку для отобржения в объекте TextView
 */
public static Location myPosition;
private static final int PERMISSION_REQUEST = 1;
public static String city = "";
/**
 * Метод вызывается в основной Activity для получения и обновения данныхо состоянии myPosition.
 * Основное действие в locationManager.requestLocationUpdates() - получение геоданных
 */
public static void setUpLocationListener(Context context) {

    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new MyLocationListener();

    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST);
    } else {
        if (locationManager != null) {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
        }
        myPosition = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        /*------- Получить название города из координат -------- */
        String cityName = "";
        Geocoder gcd = new Geocoder(context, Locale.getDefault());
        List<Address> addresses;
        try {
            addresses = gcd.getFromLocation(myPosition.getLatitude(),
                    myPosition.getLongitude(), 1);
            if (addresses.size() > 0) {
                System.out.println(addresses.get(0).getLocality());
                cityName = addresses.get(0).getLocality();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        city = "\nМой город: "
                + cityName;
    }
}
// не вызываем
@Override
public void onLocationChanged(Location location) {
    myPosition = location;
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

}

Вызов в MainActivity

    private void location() {
    MyLocationListener.setUpLocationListener(this);
    textGeo = findViewById(R.id.text_geo);
    if (MyLocationListener.myPosition != null) {
        textGeo.setText(MyLocationListener.city);
    } else {
        textGeo.setText("Локация не определена");
    }
}

Местоположение не выводится в строке с названием города.


Ответы (0 шт):