如何在Android Studio Java的文本视图中显示另一个类的变量?

问题描述

所以我有一个GPS跟踪应用程序,我想在其中一个UI中显示我的数据(距离,速度等)。

我的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 && 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.22961、4.22961、22.800003,-22.800003、0.08298418,0.0

所以我知道在LocationService类顶部声明的变量正在更改(如log.d所示),但是当我尝试从另一个获取数据时,它将仅显示“ 0”在文本视图中,就好像它不从LocationService.class中获取更新的值,而是仅获取声明的值(即使我并没有考虑任何值,仅获取变量)。这是连接到StartedSession.java中的UI的代码片段:

我声明了LocationService类:

LocationService mLocationService = new LocationService();

并使用getter通过按钮获取float变量的值:

        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”?

解决方法

使用可帮助您解决问题的SharedPreferences。