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

时间:2018-03-27 13:55:26

标签: java android firebase firebase-realtime-database

这是我的目标事件:

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) {
        //
    }
});

2 个答案:

答案 0 :(得分:1)

您可以使用回调来实现此目的。你需要创建一个界面:

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

答案 1 :(得分:0)

您可以为此目的使用EventBus libray:https://github.com/greenrobot/EventBus分三个步骤

  1. 定义事件(E.g locationRetrievedEvent)
  2. 注册订阅者(例如,您的活动)
  3. 使用EventBust post()函数
  4. 发布事件