【发布时间】:2018-05-08 21:44:27
【问题描述】:
当在 firebase 实时数据库中添加或删除子项时,我得到一个重复的列表行。重复的行是添加新子项时的旧行。会是什么?
我避免直接到达目标孩子,因为我打算从不同部分检索更多数据,所以我循环遍历数据快照。我认为这将是我的最佳选择。
DataSnapshot 孩子:dataSnapshot.getChildren()
这是我的计划:
Os osData = child.child("StaticData").child("os").getValue(Os.class);
Ram ramData = child.child("StaticData")..child("RAM").getValue(Ram.class)
...
...
这里是代码。
public class HomeActivity extends AppCompatActivity {
private static final String TAG = "HomeActivity";
SharedPreferences sharedPref;
private String uid;
private DatabaseReference databaseReference;
private RelativeLayout emptyListPlaceHolder;
List<Os> myList = new ArrayList<>();
RecyclerView rv;
HomeAdapter homeAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
rv = findViewById(R.id.recycler_view);
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.keepSynced(true);
emptyListPlaceHolder = findViewById(R.id.home_activity_empty_placeholder);
getSharedPref(); // Gets uid
getHomeData();
}
private void getHomeData() {
DatabaseReference userStatsRef = databaseReference.child("stats").child(uid);
userStatsRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int i = 0;
emptyListPlaceHolder.setVisibility(View.GONE);
for (DataSnapshot child : dataSnapshot.getChildren()) {
Os osData = child
.child("StaticData")
.child("os")
.getValue(Os.class);
myList.add(i, osData);
i++;
} // END for loop
rv.setVisibility(View.VISIBLE);
rv.setLayoutManager(new LinearLayoutManager(HomeActivity.this));
rv.setHasFixedSize(false);
homeAdapter = new HomeAdapter(myList);
rv.setAdapter(homeAdapter);
} // END onDataChange
@Override
public void onCancelled(DatabaseError error) {
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
}
【问题讨论】:
-
请添加您的数据库结构。
-
@AlexMamo 添加
-
请添加您实际数据库的截图,以便看得更清楚。
-
@AlexMamo 刚刚添加:)
标签: android firebase android-recyclerview