[英]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.