Android - recyclerView возвращает несколько раз одни и те же предметы - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь получить данные Firebase, но проблема в том, что он возвращает одни и те же данные несколько раз.

imageRef = database.getInstance().getReference("Users").child(userid);
imageRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


            for (DataSnapshot mData : dataSnapshot.child("images").getChildren()) {

                for (DataSnapshot mDataTwo: dataSnapshot.child("locations").getChildren()) {

                    ItemData itemData = new ItemData();

                    String mImages = mData.getValue(String.class);
                    String mLocations = mDataTwo.getValue(String.class);

                    itemData.setImages(mImages);
                    itemData.setLocations(mLocations);

                    data.add(itemData);

                }

            }
            adapter.notifyDataSetChanged();

        }

ОБНОВЛЕНИЕ:

Это моя структура базы данных.

"Users" : {

"X7aVfZH5oZbIaeyLm9FAjOSr5Gd2" : {
  "images" : {
    "urlImages1" : "https://firebasestorage.googleapis.com/v0/b/anthiefy.appspot.com/o/X7aVfZH5oZbIaeyLm9FAjOSr5Gd2%2FImages%2FImg1.jpg?alt=media&token=e26fd6a2-2be7-4a01-920e-0aed1fe06436",
    "urlImages2" : "https://firebasestorage.googleapis.com/v0/b/anthiefy.appspot.com/o/X7aVfZH5oZbIaeyLm9FAjOSr5Gd2%2FImages%2FImg2.jpg?alt=media&token=40165918-3b46-4b22-b0ef-255965b7855d",
    "urlImages3" : "https://firebasestorage.googleapis.com/v0/b/anthiefy.appspot.com/o/X7aVfZH5oZbIaeyLm9FAjOSr5Gd2%2FImages%2FImg3.jpg?alt=media&token=cfd7d00d-9b1a-44fd-80d4-a2947f7de743",
    "urlImages4" : "https://firebasestorage.googleapis.com/v0/b/anthiefy.appspot.com/o/X7aVfZH5oZbIaeyLm9FAjOSr5Gd2%2FImages%2FImg4.jpg?alt=media&token=995419a7-70f7-4330-b046-d06a4d54453e",
    "urlImages6" : "https://firebasestorage.googleapis.com/v0/b/anthiefy.appspot.com/o/X7aVfZH5oZbIaeyLm9FAjOSr5Gd2%2FImages%2FImg6.jpg?alt=media&token=ee6f566a-a9e5-4e8f-9d53-64d3f3bc97a6",
    "urlImages7" : "https://firebasestorage.googleapis.com/v0/b/anthiefy.appspot.com/o/X7aVfZH5oZbIaeyLm9FAjOSr5Gd2%2FImages%2FImg7.jpg?alt=media&token=883a3321-fbba-49bd-aae3-14b005b4cc5b"
  },
  "locations" : {
    "locations1" : "14.2830817 -89.7263953",
    "locations2" : "14.2661424 -89.7220017",
    "locations3" : "14.2846352 -89.7251991",
    "locations4" : "14.2684987 -89.7266704",
    "locations5" : "14.2684987 -89.7266704",
    "locations6" : "14.2684987 -89.7266704",
    "locations7" : "14.2684987 -89.7266704"
  }

Я пробовал много способов, я также искал решение, но без какого-либо состояния.Если кто-то может мне помочь, очень благодарен.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

То, что вы делаете, - для каждого изображения, которое вы перебираете в каждой локации и создаете объект этого предмета.

    List<String> images=new ArrayList<>();
    List<String> locations=new ArrayList<>();
    for (DataSnapshot mData : dataSnapshot.child("images").getChildren()) {
        String image = mData.getValue(String.class);
        images.add(image);


    }
    for (DataSnapshot mDataTwo: dataSnapshot.child("locations").getChildren()) {
        String location = mDataTwo.getValue(String.class);
        locations.add(location);
    }
    if (images.size()==locations.size()){
        for (int i=0;i<locations.size();i++){
            String image=images.get(i);
            String location=locations.get(i);
            ItemData itemData = new ItemData();
            itemData.setImages(image);
            itemData.setLocations(location);
            data.add(itemData);
        }
        adapter.notifyDataSetChanged();
    }

Попробуйте этот код.Это поможет тебе.

0 голосов
/ 10 декабря 2018

вам нужно очистить объект данных, прежде чем он перейдет в цикл.что происходит в вашем приложении, когда что-либо меняется в базе данных Firebase, оно передает все текущие данные на мобильный, поэтому каждый раз, когда вы что-либо изменяете в облаке, избыточные данные также попадают в объект DataSnapShot, поэтому вам нужно очистить ArrayList или список, который выпринимается за «данные».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...