如何在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。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...