#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, которые помогут вам в вашем случае.