Java 两类简单传递变量

Java 两类简单传递变量,java,android,gps,Java,Android,Gps,我有两个简单的课程。主要和一些gps辅助工具。当gps位置发生变化(位置发生变化)时,我试图到达距离。它工作正常,但当我尝试使用setter保存变量dis,并在MainActivity(最后一个名为ObliczanieOdl的方法)中达到它时,所有方法都有0.0。为什么?有什么建议吗 public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { @BindView(R.id.butStop)

我有两个简单的课程。主要和一些gps辅助工具。当gps位置发生变化(位置发生变化)时,我试图到达距离。它工作正常,但当我尝试使用setter保存变量dis,并在MainActivity(最后一个名为ObliczanieOdl的方法)中达到它时,所有方法都有0.0。为什么?有什么建议吗

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
@BindView(R.id.butStop)
Button butStop;
@BindView(R.id.butWynik)
Button butKoniec;
private GoogleMap mMap;
private String dlugosc;
private String szerokosc;
private LatLng StartP, StopP;
private Date czasS;
private DatabaseHelper mDatabaseHelper;
private String adres;
private int Dystans;
private boolean oneStop = false;
private GPStracker gpStracker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    ButterKnife.bind(this);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);

    mapFragment.getMapAsync(this);
    ActivityCompat.requestPermissions(MapsActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);
    Intent intent = getIntent();
    gpStracker = new GPStracker(getApplicationContext());

    dlugosc = intent.getStringExtra("dlugosc");
    szerokosc = intent.getStringExtra("szerokosc");
    StartP = new LatLng(Double.parseDouble(szerokosc), Double.parseDouble(dlugosc));
    czasS = new Date();
    mDatabaseHelper = new DatabaseHelper(this);
    mDatabaseHelper.setStartP(getAdres(StartP));//wyciągnięcie adresu rozpoczęcia podróży
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    addMarker(StartP);
}

private void addMarker(LatLng pozycja) {
    mMap.addMarker(new MarkerOptions().position(pozycja));
    CameraPosition cameraPosition = new CameraPosition.Builder()
            .target(pozycja)
            .zoom(10).build();
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}

@OnClick(R.id.butStop)
public void butStop() {
    if (oneStop == false) {

        oneStop = true;
        Location location = gpStracker.getlocation();
        if (location != null) {
            StopP = new LatLng(location.getLatitude(), location.getLongitude());
        }
        addMarker(StopP);

        mDatabaseHelper.setKoniecP(getAdres(StopP)); //wyciągnięcie adresu zakonczenia podróży
        //wyciągnięcie odległości i czasu podróży
        mDatabaseHelper.setCzasP(String.valueOf(ObliczanieOdl(StartP, StopP)) + " KM " + "w czasie: " + WyliczCzas());

        boolean insertData = mDatabaseHelper.addData();
    } else {
        toastMessage("Twoja podróż została zakończona");
    }
}

@OnClick(R.id.butWynik)
public void butKoniec() {
    if (oneStop == false) {
        toastMessage("Musisz zakończyć podróż wciskając STOP");
    } else {

        Intent intent = new Intent(MapsActivity.this, ListDataActivity.class);
        startActivity(intent);
    }
}


public double ObliczanieOdl() {

    Double metry = gpStracker.getDis();

    return metry;
}
}

第二,作为GPS助手:

public class GPStracker implements LocationListener {
Context context;
double plat;
double plon;
double clat;
double clon;

public double dis;

public GPStracker(Context c) {
    context = c;
}

public Location getlocation() {
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(context, "Uprawnienia nie przyznane", Toast.LENGTH_SHORT).show();
    }

    LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    boolean isGPSenabled;
    isGPSenabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (isGPSenabled) {
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 1, this);
        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        return location;
    } else {
        Toast.makeText(context, "Proszę włączyć GPS", Toast.LENGTH_LONG).show();
    }
    return null;
}

@Override
public void onLocationChanged(Location location) {
    clat = location.getLatitude();
    clon = location.getLongitude();
    if (clat != plat || clon != plon) {
        dis += getDistance(plat, plon, clat, clon);
        plat = clat;
        plon = clon;

        setDis(dis);
    }
    Toast.makeText(context, String.valueOf(dis), Toast.LENGTH_SHORT).show();
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}

public double getDistance(double lat1, double lon1, double lat2, double lon2) {
    double latA = Math.toRadians(lat1);
    double lonA = Math.toRadians(lon1);
    double latB = Math.toRadians(lat2);
    double lonB = Math.toRadians(lon2);
    double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB - lonA)) +
            (Math.sin(latA) * Math.sin(latB));
    double ang = Math.acos(cosAng);
    double dist = ang * 6371;
    return dist;
}

public double getDis() {
    return dis;
}

public void setDis(double dis) {
    this.dis = dis;
}

}

您在onLocationChange中向“dis”变量添加了内容,但我看不出您在哪里初始化它。也许这就是问题所在?顺便说一句,用一种语言命名所有内容是一个好习惯(嗨,波兰人!):)在某些情况下,您会给字段赋值,但在某些情况下,您会在同一个类中使用setter。最好选择一种风格。您不需要将setter设置为公共字段。嗨,Kamila-我不认为初始化是个问题,因为当我吐司dis时,它会显示我想要的值。。。。