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