【发布时间】:2021-10-01 05:24:22
【问题描述】:
我正在使用 Android Studio 和 Firebase 实时数据库创建一个简单的应用程序。当用户通过应用注册时,他的数据将保存在 firebase auth 提供的 Uid 下。 然后我在这个特定用户下创建了另一个节点(称为 PATH )来存储他的成就。为此,我已将一个密钥推入该节点并在其下存储数据。
现在我想将 PATH/pushedKey 下的这些数据检索到 RecyclerView。但是每次我运行代码时,它都会给 auth.getCurrentUser().getUid() 提供空指针异常。但是在调用它时用户已经登录。我在 android studio 或 firebase 方面并不成熟,但据我所知,如果用户已经登录,那么我在代码中放入的数据库引用一定有问题。但我什么也找不到。我从网站和谷歌尝试了许多解决方案,但也没有任何效果。 这是我调用数据的部分。
reference = FirebaseDatabase.getInstance().getReference();
user_reference = reference.child("users");
path_reference = user_reference.child(auth.getCurrentUser().getUid()).child("PATH");
auth = FirebaseAuth.getInstance();
recyclerView = findViewById(R.id.recycler_path);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
arrayList = new ArrayList<>();
path_adapter = new PATH_Adapter(this, arrayList);
recyclerView.setAdapter(path_adapter);
path_reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot key : snapshot.getChildren()) {
Model model = key.getValue(Model.class);
arrayList.add(model);
path_adapter.notifyDataSetChanged();
Log.d(TAG, user_id);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.v(TAG, error.getMessage());
}
});
还有我的适配器类可以更清楚地了解这一点;
public class PATH_Adapter extends RecyclerView.Adapter<PATH_Adapter.PViewHolder> {
Context context;
ArrayList<Model> arrayList;
public PATH_Adapter(Context context, ArrayList<Model> arrayList){
this.context = context;
this.arrayList = arrayList;
}
@NonNull
@Override
public PATH_Adapter.PViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.path_list, parent, false);
return new PViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull PATH_Adapter.PViewHolder holder, int position) {
String achie = arrayList.get(position).getAchievement();
String date = arrayList.get(position).getDate();
holder.setAch( achie, date);
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class PViewHolder extends RecyclerView.ViewHolder{
private TextView achievement, dates;
public PViewHolder(@NonNull View itemView) {
super(itemView);
achievement = itemView.findViewById(R.id.achievement);
dates = itemView.findViewById(R.id.date);
}
public void setAch( String achie, String date){
achievement.setText(achie);
dates.setText(date);
}
}
}
这是我的 Model.class,
public class Model {
String Achievement, Date;
public Model(String achievment, String date) {
this.Achievement = achievment;
this.Date = date;
}
public String getAchievement() {
return Achievement;
}
public void setAchievement(String achievment) {
this.Achievement = achievment;
}
public String getDate() {
return Date;
}
public void setDate(String date) {
this.Date = date;
}
}
我真的想要一些新的眼睛和更好的知识,所以如果有人知道我在这里做错了什么或者我可以尝试什么来解决这个问题,非常欢迎你在这里。
【问题讨论】:
-
请编辑您的问题并添加您的
Model课程的内容。 -
@AlexMamo 模型类已添加。
标签: java android firebase firebase-realtime-database android-recyclerview