如何从另一个事件Android Studio获取数据对象



这是我的目标事件:

refDatabase.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        LatLng newlocation = new LatLng(dataSnapshot.child("latitude").getValue(Double.class),dataSnapshot.child("longitude").getValue(Double.class));
        nama = new String(dataSnapshot.child("nama").getValue(String.class));
        kec = new String(dataSnapshot.child("kecamatan").getValue(String.class));
        kab = new String(dataSnapshot.child("kebupaten").getValue(String.class));
        googleMap.addMarker(new MarkerOptions().position(newlocation).title(nama+", "+kec+", "+kab));  
    }
});

如何获得对象newlocation并将其放在此事件中:

tampil.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //
    }
});

您可以使用回调来实现此目标。拳头您需要创建一个接口:

public interface MyCallback {
    void onCallback(LatLng newlocation);
}

然后,您需要创建一种实际上从数据库中获取数据的方法。此方法应该像这样:

public void readData(MyCallback myCallback) {
    refDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            newlocation = new LatLng(dataSnapshot.child("latitude").getValue(Double.class),dataSnapshot.child("longitude").getValue(Double.class));
            nama = new String(dataSnapshot.child("nama").getValue(String.class));
            kec = new String(dataSnapshot.child("kecamatan").getValue(String.class));
            kab = new String(dataSnapshot.child("kebupaten").getValue(String.class));
            googleMap.addMarker(new MarkerOptions().position(newlocation).title(nama+", "+kec+", "+kab));
            myCallback.onCallback(newlocation);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}

最后,只需调用 readData()方法,然后将MyCallback接口的实例作为参数,在您的onClick()方法中:

tampil.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        readData(new MyCallback() {
            @Override
            public void onCallback(LatLng newlocation) {
                //Do what you need to do with newlocation
            }
        });
    }
});

有关更多信息,我建议您从此 post 中查看anwser,还请查看此 video

您可以将EventBus Libray用于此目的:https://github.com/greenrobot/eventbus在三个步骤中

  1. 定义事件(例如LocationReliveEvent(
  2. 注册订户(例如您的活动(
  3. 使用EventBust Post((函数发布事件

最新更新