загружает дважды данные при добавлении данных Firebase - PullRequest
0 голосов
/ 04 июля 2019

Я извлекаю данные из Firebase и добавляю данные в базу данных.Этот процесс работает гладко.Но когда я добавляю комнату, данные снова загружаются в RecyclerView, что означает наличие двух одинаковых RecyclerView.После добавления данных я просто хочу добавить новые данные, чтобы старые данные больше не загружались.Просто хочу добавить новые данные в конец старых данных.

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");

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 recyclerView = (RecyclerView) findViewById(R.id.rvRooms);
          mAdapter = new RoomsAdapter(roomList);
          recyclerView.setAdapter(mAdapter);

            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
            linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(linearLayoutManager);

            getRoom();
}
 @Override
    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").addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                            dataSnapshot.getRef().child(roomsText).setValue(roomsText);

                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    });

                }
            });
            dialogBuilder.setNegativeButton("İptal", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    //pass
                }
            });
            AlertDialog b = dialogBuilder.create();
            b.show();

        }

        return super.onOptionsItemSelected(item);
    }
}

private void getRoom() {

        ref.addValueEventListener(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);
                    roomList.add(getdata);

                    mAdapter.notifyDataSetChanged();


                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                Toast.makeText(getApplicationContext(), "AWW SNAP... Something is Wrong.", Toast.LENGTH_LONG).show();
            }
        });

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Просто очистите список, прежде чем добавлять в переработчик, просто так: -

private void getRoom () {

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

             if(roomList.getSize() != 0){
                  roomList.clear(); 
              }

            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                String data = snapshot.getValue(String.class);

                Rooms getdata = new Rooms(data);
                roomList.add(getdata);

                mAdapter.notifyDataSetChanged();


            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

            Toast.makeText(getApplicationContext(), "AWW SNAP... Something is Wrong.", Toast.LENGTH_LONG).show();
        }
    });
0 голосов
/ 04 июля 2019

Измените свой метод на приведенный ниже и установите проверку, используя метод ArrayList

ref.addValueEventListener(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) {

        Toast.makeText(getApplicationContext(), "AWW SNAP... Something is Wrong.", Toast.LENGTH_LONG).show();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...