Как я могу показать переменную из другого класса в текстовом представлении в Android studio java?

#java #android #getter #setter

#java #Android #геттер #установщик

Вопрос:

Итак, у меня есть приложение для отслеживания GPS, и я хочу показать свои данные (расстояние, скорость и т.д.) В одном из пользовательских интерфейсов.

Мой LocationService.java отслеживает все показатели в службе переднего плана:

 public class LocationService extends Service implements LocationListener{

public ArrayList<Location> lastLocationResultArray = new ArrayList<>();
public float distance;
public float distanceKm;
public float ascent;
public float descent;
public float currentSpeed;
Location changedLocation;
double currentAltitude;
public float averageSpeed;

private static DecimalFormat df1 = new DecimalFormat("#");
private static DecimalFormat df2 = new DecimalFormat("#.#");
private static DecimalFormat df3 = new DecimalFormat("#.##");

public static final String EXTRA_DISTANCE = "com.example.iathleticsrecorder.EXTRA_DISTANCE";

public LocationCallback locationCallback = new LocationCallback(){
    @Override
    public void onLocationResult(LocationResult locationResult) {
        super.onLocationResult(locationResult);
        if(locationResult != null amp;amp; locationResult.getLastLocation() != null){
            Location actualLocation = locationResult.getLastLocation();
            double latitude = locationResult.getLastLocation().getLatitude();
            double longitude = locationResult.getLastLocation().getLongitude();
            double altitude = locationResult.getLastLocation().getAltitude();
            double speed = locationResult.getLastLocation().getSpeed();
            Log.d("LOCATION_UPDATE", latitude   ", "   longitude   ", "   altitude   ", "   locationResult);

            currentSpeed = (float) (speed*3.6f);
            
            changedLocation = actualLocation;

            if(!lastLocationResultArray.isEmpty()) {
               distance  = changedLocation.distanceTo(lastLocationResultArray.get(lastLocationResultArray.size() - 1));
                distanceKm = distance/1000;

                Location lastlocation = lastLocationResultArray.get(lastLocationResultArray.size() - 1);
                double lastAltitude = lastlocation.getAltitude();
                double altitudeChange = altitude-lastAltitude;
                if(altitudeChange<-9) {
                    descent  = altitudeChange;
                } else if(altitudeChange>9) {
                    ascent  = altitudeChange;
                }

            }

            lastLocationResultArray.add(changedLocation);
            Log.d("ENDOFLOOP", distanceKm   ", "   distance   ", "   ascent   ", "   descent   ", "   currentSpeed   " ,"   averageSpeed );
        }
    }
};

public String getDistance() {
    return df3.format(distance);
}
  

Вот пример того, как все показатели суммируются из «Log.d (ENDOFLOOP)»:

2020-10-05 19:32:55.486 20116-20116/com.example.iathleticsrecorder D / ENDOFLOOP: 0.0042962608858942986, 4.296261, 4.296261, 22.800003, -22.800003, 0.08298418 ,0.0

Итак, я знаю, что переменные, объявленные в верхней части LocationService-класса, меняются (как видно из log.d), но когда я пытаюсь получить данные из другого класса, в textview отображается только «0», как если бы он не принимал обновленные данные.значение из LocationService.class , но только объявленное значение (хотя я не определил никакого значения, только переменную). Вот фрагмент кода, который подключен к пользовательскому интерфейсу в StartedSession.java:

Я объявляю LocationService-класс:

 LocationService mLocationService = new LocationService();
  

И используйте геттер, чтобы получить значение переменной с плавающей точкой с помощью кнопки:

         btUpdateNumbers = findViewById(R.id.btUpdateNumbers);
    btUpdateNumbers.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            txtViewDistance.setText(mLocationService.getDistance());
            //txtViewCurrentSpeed.setText(mLocationService.getSpeed());
        }
    });
  

Почему он показывает только «0»?

Ответ №1:

Используйте SharedPreferences, которые помогут вам в вашем случае.