【发布时间】:2020-06-12 06:33:27
【问题描述】:
目前,我正在编写一个社交媒体应用程序,现在我想从我的 firebase 数据库中检索数据,每个用户都有一些评分。 mUploads - 它存储上传的项目(照片、姓名、城市、ID)。 mDatabaseRef-ratings - 它存储上传项目的评级,(有些项目还没有评级)。它们具有相同的 ID,就像在 mUploads->ID 中一样
这实际上是一个大项目,我已经多次检索了其他类型的 firebase 元素,但是这次 addvalueventlistener 不会被调用,我想不通。为什么?
这不是全部代码,但主要部分是这个。我尝试了几种方法,但没有任何帮助。我尝试不仅在这个适配器类中调用它,而且在我的其他类中调用它,在那里我检索 mUploads 列表的数据。
...
public class ProfileAdapter extends RecyclerView.Adapter<ProfileAdapter.ImageViewHolder> implements Filterable {
private Context mContext;
private List<Upload> mUploads;
private List<Upload> exampleListFull;
private OnNoteListener mOnNoteListener;
private ArrayList<Ratingsclass> mratings_array;
public float sumofstars, numofratings, defaultstars;
private DatabaseReference mDatabaseRef_ratings;
public ProfileAdapter(Context context, List<Upload> upload, OnNoteListener onNoteListener){//, ArrayList<Ratingsclass> ratinglist){
mContext=context;
mUploads=upload;
exampleListFull=new ArrayList<>(upload);
mOnNoteListener=onNoteListener;
for (int i = 0; i < mUploads.size(); i++){
mDatabaseRef_ratings = FirebaseDatabase.getInstance().getReference("ratings");
Log.d("myTag", "loop");
/*checking if child already exists*/
mDatabaseRef_ratings=mDatabaseRef_ratings.child(mUploads.get(i).getKey());
Log.d("myTag", "ez az id: "+ mUploads.get(i).getKey());
final int finalI = i;
mDatabaseRef_ratings.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() == null) {
// The child doesn't exist
Log.d("myTag", "has no rating");
}else{
mDatabaseRef_ratings = FirebaseDatabase.getInstance().getReference("ratings").child(mUploads.get(finalI).getKey());
Log.d("myTag", "checking the elements of this child");
mDatabaseRef_ratings.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Ratingsclass temp = new Ratingsclass();
numofratings = 0;
sumofstars = 0;
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
temp = postSnapshot.getValue(Ratingsclass.class);
numofratings += 1;
sumofstars += temp.getNum_of_stars();
Log.d("myTag", numofratings + " es " + sumofstars);
}
if (numofratings == 0)
defaultstars = 0;
else
defaultstars = sumofstars / numofratings;
temp.setRatingid(mUploads.get(finalI).getKey());
temp.setRating_sum(defaultstars);
mratings_array.add(temp);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
//
}
});
}
}
...等
【问题讨论】:
标签: java android firebase firebase-realtime-database