在RecyclerView上连续更新Firebase数据

时间:2019-07-04 13:16:33

标签: android

添加数据时,我希望我获取的数据立即更新。我正在将数据从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) {

                }
            });

        }

1 个答案:

答案 0 :(得分:1)

您需要使用以下方法更改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
});