簡體   English   中英

如何在Android studio java的textview中顯示另一個類的變量?

[英]How can I show a variable from another class in a textview in 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.296261, 4.296261, 4.2962.80,20.2080,20.80,20.80

所以我知道在 LocationService 類頂部聲明的變量正在發生變化(如 log.d 中所示),但是當我嘗試從另一個類獲取數據時,它只會在 textview 中顯示“0” ,好像它沒有從 LocationService.class 中獲取更新的值,而只是聲明的值(即使我沒有 decared 任何值,只有變量)。 下面是連接到 StartedSession.java 中的 UI 的代碼片段:

我聲明 LocationService 類:

LocationService mLocationService = new LocationService();

並使用 getter 通過按鈕獲取浮點變量的值:

        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 可以幫助您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM