Как передать переменную из одного метода в другой в том же действии Android

#android

#Android

Вопрос:

Я новичок в Android, и я попытался передать 2 двойные переменные из одного метода в другой, чтобы загрузить их в базу данных firebase, но мне это не удалось, переменные поступают из местоположения, размещенного на карте. Как я мог бы передать данные из searchLocation в SaveDatasMap и загрузить их в базу данных?

Я пытался поместить их в статические методы, но это не позволяет мне их размещать. Я попытался поместить двойные переменные в начале, но я не могу заставить их иметь значение, которое у них запрашивается: иметь долготу и широту в выбранных переменных

 public  void searchLocation(View view) {


    EditText locationSearch = (EditText) findViewById(R.id.editText);
    final String location = locationSearch.getText().toString();
    List<Address> addressList = null;

    if (location != null || !location.equals("")) {
        Geocoder geocoder = new Geocoder(this);
        try {
            addressList = geocoder.getFromLocationName(location, 1);

        } catch (IOException e) {
            e.printStackTrace();
        }
        final Address address = addressList.get(0);
        final LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
        mMap.clear();
        mMap.addMarker(new MarkerOptions().position(latLng).title(location));
        mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
        Toast.makeText(getApplicationContext(),address.getLatitude() " " address.getLongitude(),Toast.LENGTH_LONG).show();
 double       longitud = address.getLatitude();
   double     latitud = address.getLatitude();










    }


}

public void  SaveDatasMap (View view)
{
    GuardarUbicacion = (Button) findViewById(R.id.guardarubicacion);
    final DatabaseReference RootRef;
    RootRef = FirebaseDatabase.getInstance().getReference();
    RootRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if (!(dataSnapshot.child("Empresa").child(currentUserID).exists()))
            {
                HashMap<String, Object> userdataMap = new HashMap<>();
                userdataMap.put("Longitud", longitud);
                userdataMap.put("Longitud", latitud);

                RootRef.child("Empresa").child(currentUserID).updateChildren(userdataMap)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                if(task.isSuccessful())
                                {
                                    Toast.makeText(MapTemporalActivity.this, "Se ha guardado la posicion exitosamente", Toast.LENGTH_SHORT).show();

                                    Intent intent = new  Intent(MapTemporalActivity.this, LoginActivity.class);
                                    startActivity(intent);


                                }
                                else
                                {

                                    Toast.makeText(MapTemporalActivity.this, "Hubo un  error", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
  

}

Мне нужно передать переменные longitude и latitude. Я загрузил данные в базу данных, но я не знаю, как передать двойные переменные searchLocation или передать напрямую address.getLatitude () и address.getLongitude() методу SavesDataMap

Я понимаю, что мне пришлось бы выполнять метод в static, но это не позволяет мне android Studio

Ответ №1:

Вы можете сделать эти две переменные глобальными. создайте их экземпляр следующим образом.
double longitud;
double latitud;

В вашем методе searchLocation выполните следующие действия:
longitud = address.getLatitude();
latitud = address.getLatitude();

Затем в методе SaveDatasMap вы должны быть в состоянии получить данные.

Комментарии:

1. Когда я нажимаю кнопку для сохранения информации, ничего не происходит, я что-то пропустил? Я добавил setOnClickListener для вызова этого метода и удалил идентификацию кнопки, которая была внутри метода