Android 持续更新RecyclerView上的firebase数据

Android 持续更新RecyclerView上的firebase数据,android,Android,当我添加数据时,我希望我获取的数据能够立即更新。我正在从Firebase房间中提取数据,并希望在添加新房间时在RecyclerView中更新数据。使用Getroom功能,我从Firebase中提取数据并将其传输到RecyclerView。我正在使用AddRoom添加房间。添加房间时,我希望立即添加RecyclerView中的数据。所以我想通过不断地从Firebase中提取数据来更新 public class RoomsActivity extends AppCompatActivity

当我添加数据时,我希望我获取的数据能够立即更新。我正在从Firebase房间中提取数据,并希望在添加新房间时在RecyclerView中更新数据。使用Getroom功能,我从Firebase中提取数据并将其传输到RecyclerView。我正在使用AddRoom添加房间。添加房间时,我希望立即添加RecyclerView中的数据。所以我想通过不断地从Firebase中提取数据来更新

    public class RoomsActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
     private List<Rooms> roomList = new ArrayList<>();
        private RecyclerView recyclerView;
        private RoomsAdapter mAdapter;
        DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
        DatabaseReference ref = mDatabase.child("0").child("Rooms");
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     recyclerView = (RecyclerView) findViewById(R.id.rvRooms);
              mAdapter = new RoomsAdapter(roomList);
              recyclerView.setAdapter(mAdapter); 
 getRoom();

        }

     public boolean onOptionsItemSelected(MenuItem item) {  if (id == R.id.add_rooms) {
                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(RoomsActivity.this);
                LayoutInflater inflater = RoomsActivity.this.getLayoutInflater();
                final View dialogView = inflater.inflate(R.layout.rooms_dialog, null);
                dialogBuilder.setView(dialogView);

                final EditText edt = (EditText) dialogView.findViewById(R.id.edit1);

                dialogBuilder.setTitle("Oda Ekle");
                dialogBuilder.setMessage("Eklemek istediğiniz odanın adını yazınız");
                dialogBuilder.setPositiveButton("Ekle", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int whichButton) {
   final String roomsText =  edt.getText().toString();
   final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("0");               rootRef.child("Rooms").child(roomsText).setValue(roomsText);
                    }
                });
                dialogBuilder.setNegativeButton("İptal", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    }
                });
                AlertDialog b = dialogBuilder.create();
                b.show();
            }
            return super.onOptionsItemSelected(item);
        }
 private void getRoom() {

  ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
         for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                        String data = snapshot.getValue(String.class);
                        Rooms getdata = new Rooms(data);
                        if (!roomList.contains(getdata)) {
                            roomList.add(getdata);
                        }

                        mAdapter.notifyDataSetChanged();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }
公共类RoomsActivity扩展了AppCompative活动实现了NavigationView.OnNavigationItemSelectedListener{
private List roomList=new ArrayList();
私人回收站;
私人房间公寓;
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference();
DatabaseReference=mDatabase.child(“0”).child(“房间”);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
recyclerView=(recyclerView)findViewById(R.id.rvRooms);
mAdapter=新房间dapter(房间列表);
recyclerView.setAdapter(mAdapter);
getRoom();
}
公共布尔值onOptionsItemSelected(菜单项){if(id==R.id.add_){
AlertDialog.Builder dialogBuilder=新建AlertDialog.Builder(RoomsActivity.this);
LayoutInflater充气器=RoomsActivity.this.getLayoutInflater();
最终视图对话框视图=充气机。充气(R.layout.rooms\u对话框,空);
dialogBuilder.setView(dialogView);
最终EditText edt=(EditText)dialogView.findViewById(R.id.edit1);
dialogBuilder.setTitle(“Oda Ekle”);
dialogBuilder.setMessage(“Eklemek istediğinizing odanınıyazınız”);
dialogBuilder.setPositiveButton(“Ekle”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
最后一个字符串roomsText=edt.getText().toString();
final DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference().child(“0”);rootRef.child(“房间”).child(roomsText).setValue(roomsText);
}
});
dialogBuilder.setNegativeButton(“İptal”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
}
});
AlertDialog b=dialogBuilder.create();
b、 show();
}
返回super.onOptionsItemSelected(项目);
}
私人休息室(){
ref.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
String data=snapshot.getValue(String.class);
Rooms getdata=新房间(数据);
如果(!roomList.contains(getdata)){
添加(getdata);
}
mAdapter.notifyDataSetChanged();
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}

您需要使用以下方法更改getroom()方法事件。并使用addListenerForSingleValueEvent方法进行一次性数据检索。如果需要连续数据,则需要更改方法

ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    User bruceWayne = dataSnapshot.child("371298").getValue(User.class);
    // Do something with the retrieved data or Bruce Wayne
}

@Override
public void onCancelled(DatabaseError databaseError) {
    Log.e("UserListActivity", "Error occured");
    // Do something about the error
});