Android, Java - Как использовать один DTO в двух классах - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь сделать приложение карты.

Есть два вида деятельности, которые должны получить текущее местоположение. Первым действием является MainActivity, и все коды для получения текущего местоположения находятся в нем. И второе - это действие, которое пользователь может установить место отправления. Когда пользователь нажимает кнопку, чтобы установить точку отправления в качестве текущего местоположения, мне нужно получить значения из MainActivity.

Я сделал CurrentLocationDTO, чтобы решить эту проблему. Но почему-то, когда я вызываю currentDTO.getLatitude () во втором действии, он просто возвращает 0.0. Я понятия не имею, почему он возвращает инициализированное значение, даже если оно вызывается после того, как currentDTO.setLatitude(value); все сделано в MainActivity.

Я создал объект DTO, написав CurrentLocationDTO currentDTO = new CurrentLocationDTO(); в каждом классе. Это неправильно, чтобы сделать это так? Или есть какие-то другие идеи для решения этой проблемы, пожалуйста, поделитесь со мной.

вот MainActivity.java

public class MainActivity extends AppCompatActivity {

private final String TAG = this.getClass().getSimpleName();

private final String TMAP_API_KEY = "10062d5b-d3d3-4b7d-8977-acd3ac2dc390";
LocationManager lm;
TMapView tMapView;
EditText Departure, Arrival;
Button Search;
LinearLayout Layout;
FloatingActionButton Current, Navigate;
String D_lon;
String D_lat;
String A_lon;
String A_lat;


//floatingActionButton 활성화/비활성화
Boolean FabActive = false; //navigate 버튼용
private ArrayList<TMapPoint> arPoint;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    LinearLayout linearLayoutTmap = (LinearLayout) findViewById(R.id.linearLayoutTmap);
    tMapView = new TMapView(this);
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //위치 관리자 객체 참조


    Departure = findViewById(R.id.departure);
    Arrival = findViewById(R.id.arrival);
    Search = findViewById(R.id.search);
    Layout = findViewById(R.id.search_layout);
    Current = findViewById(R.id.current_location);
    Navigate = findViewById(R.id.navigate);

    tMapView.setSKTMapApiKey(TMAP_API_KEY);
    linearLayoutTmap.addView(tMapView);
    tMapView.setIconVisibility(true);

    setGps();



    Departure.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivityForResult(new Intent(MainActivity.this, MapListActivity.class), 200);
        }
    });

    Arrival.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivityForResult(new Intent(MainActivity.this, MapListActivity.class), 300);
        }
    });
}




public void setGps() {
    //final LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    }

    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, // 등록할 위치제공자(실내에선 NETWORK_PROVIDER 권장)
            1000, // 통지사이의 최소 시간간격 (miliSecond)
            1, // 통지사이의 최소 변경거리 (m)
            mLocationListener);

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, // 등록할 위치제공자(실내에선 NETWORK_PROVIDER 권장)
            1000, // 통지사이의 최소 시간간격 (miliSecond)
            1, // 통지사이의 최소 변경거리 (m)
            mLocationListener);

}

private LocationListener mLocationListener = new LocationListener() {
    public void onLocationChanged(Location location) {


        double latitude;
        double longitude;

        if (location != null) {
            CurrentLocationDTO currentLocationDTO = new CurrentLocationDTO();
            //I get values from location object here, and use setter to store it
            latitude = location.getLatitude();
            longitude = location.getLongitude();
            currentLocationDTO.setLatitude(latitude);
            currentLocationDTO.setLongitude(longitude);
            Log.e("Test", currentLocationDTO.getLatitude() + ", " + currentLocationDTO.getLongitude()); //I can get proper values here
            Log.e(TAG, latitude + " , " + longitude);
            tMapView.setLocationPoint(longitude, latitude);
            tMapView.setCenterPoint(longitude, latitude);

        }

    }

    public void onProviderDisabled(String provider) {
    }

    public void onProviderEnabled(String provider) {
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
};

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (requestCode == 200) {
        if (resultCode == RESULT_OK) {
            String D_str = data.getStringExtra("selected");
            D_lat = data.getStringExtra("lat");
            D_lon = data.getStringExtra("lon");
            Departure.setText(D_str);
            // Toast.makeText(getApplicationContext(), "requestCode= " + requestCode, Toast.LENGTH_SHORT).show();
            // Toast.makeText(this, D_str, Toast.LENGTH_SHORT).show();
            Toast.makeText(this, "lat : " + D_lat + " lon : " + D_lon, Toast.LENGTH_SHORT).show();
        }
    }

    if (requestCode == 300) {
        if (resultCode == RESULT_OK) {
            String A_str = data.getStringExtra("selected");
            A_lat = data.getStringExtra("lat");
            A_lon = data.getStringExtra("lon");
            Arrival.setText(A_str);
            // Toast.makeText(getApplicationContext(), "requestCode= " + requestCode, Toast.LENGTH_SHORT).show();
            Toast.makeText(this, A_str, Toast.LENGTH_SHORT).show();
        }
    }
}
}

А это CurrentLocationDTO.java

package com.example.gpgpt.myapplication;

public class CurrentLocationDTO {

private double latitude;
private double longitude;
public double getLatitude() {
    return latitude;
}

public void setLatitude(double latitude) {
    this.latitude = latitude;
}

public double getLongitude() {
    return longitude;
}

public void setLongitude(double longitude) {
    this.longitude = longitude;
}

}

MapListActivity.java - я пытался использовать getter, но он возвращает начальные значения DTO

      Current.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            CurrentLocationDTO currentLocationDTO = new CurrentLocationDTO();
            double lon = currentLocationDTO.getLongitude();
            double lat = currentLocationDTO.getLatitude();
            currentLocationDTO.setLongitude(13.8);
            Text.setText(lon+", "+lat);
        }
    });

Спасибо

...