gpt4 book ai didi

java - 为什么我的 Firebase addvalueEventlistener 不会被调用?

转载 作者:行者123 更新时间:2023-12-04 23:58:00 24 4
gpt4 key购买 nike

目前,我正在编写一个社交媒体应用程序,现在我想从我的 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) {
//
}
});

}

}

...等等

最佳答案

如果您将监听器传递给适配器 onNoteListener 的构造函数,您应该在您的 Activity/fragment 中监听此接口(interface)所做的更改。

在您的代码中,在您使用的适配器中

mOnNoteListener=onNoteListener;

但您永远不会调用接口(interface)将值发送到您的 View (在 onDataChange(...) 内部)

所以,要获取这些值,您需要做的就是调用您的接口(interface)将这些值发送到您的 View

因此,在 Firebase 中获取数据后使用回调

mOnNoteListener.yourMethod(your_value);

关于java - 为什么我的 Firebase addvalueEventlistener 不会被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62310143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com