我正在尝试获取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"
}
我尝试了许多方法,我也寻求了解决方案,但没有任何财富。如果有人可以帮助我,非常感谢。
答案 0 :(得分:3)
您需要在控制进入循环之前清除数据对象。 应用程序中发生的事情是,firebase数据库上发生任何更改时,它将所有现有数据提供给移动设备,因此,每当您在云上更改任何内容时,冗余数据也会进入DataSnapShot对象,因此您需要清除ArrayList或已列出的列表视为“数据”。
答案 1 :(得分:0)
您要做的是针对每个图像迭代每个位置并创建该Item的对象。
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();
}
尝试此代码。会帮你的。