我无法从我的firebasedatabase获得价值

发布于 2025-02-07 11:31:21 字数 4035 浏览 0 评论 0原文

运行程序时我会遇到此错误: com.cdirect.agenda2.allevents $ 1.DATATACHANGE(Pleatents.java:47) - events events = datasnapshot.getValue(event.class);

我想从我的firebasedatabase获取所有数据。我创建了Event.java。它有Getter和Setter。 MyAdapter正在适应Partents.java上的回收。我想显示Parevents.java上的所有数据。 但是我无法成功。你能帮助我吗?

myadapter.java:myevents.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
Context context;
ArrayList<Events> list;
public MyAdapter(Context context, ArrayList<Events> list) {
    this.context = context;
    this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(context).inflate(R.layout.evententry,parent,false);
    return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    Events events = list.get(position);
    holder.plan.setText(events.getPlan());
    holder.note.setText(events.getNote());
    holder.date.setText(events.getDate());
    holder.time.setText(events.getTime());
    holder.remb.setText(events.getRemb());
}
@Override
public int getItemCount() {
    return list.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
    TextView id, plan, note, date, time, remb;
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        id = itemView.findViewById(R.id.tvIdCard);
        plan = itemView.findViewById(R.id.tvPlanCard);
        note = itemView.findViewById(R.id.tvNoteCard);
        date = itemView.findViewById(R.id.tvDateCard);
        time = itemView.findViewById(R.id.tvTimeCard);
        remb = itemView.findViewById(R.id.tvRememberCard);
    }
}

events.java

public class AllEvents extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList<Events> list;
DatabaseReference dbRef;
MyAdapter adapter;

@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(AllEvents.this, MainActivity.class));
    finish();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_events);

    recyclerView = findViewById(R.id.recycleView);
    dbRef = FirebaseDatabase.getInstance().getReference("Events");
    list = new ArrayList<>();
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MyAdapter(this, list);
    recyclerView.setAdapter(adapter);
    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for(DataSnapshot dataSnapshot: snapshot.getChildren()){
                Events events = dataSnapshot.getValue(Events.class);
                list.add(events);
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}
}

我的

public class Events {
String id;
String plan;
String note;
String date;
String time;
String remb;

public Events(String id, String plan, String note, String date, String time, String remb) {
    this.id = id;
    this.plan = plan;
    this.note = note;
    this.date = date;
    this.time = time;
    this.remb = remb;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getPlan() {
    return plan;
}
public void setPlan(String plan) {
    this.plan = plan;
}
public String getNote() {
    return note;
}
public void setNote(String note) {
    this.note = note;
}
public String getDate() {
    return date;
}
public void setDate(String date) {
    this.date = date;
}
public String getTime() {
    return time;
}
public void setTime(String time) {
    this.time = time;
}
public String getRemb() {
    return remb;
}
public void setRemb(String remb) {
    this.remb = remb;
}
}

数据库是: 态

I get this error when I run the program:
com.cdirect.agenda2.AllEvents$1.onDataChange(AllEvents.java:47)
-Events events = dataSnapshot.getValue(Events.class);

I want to get all data from my FirebaseDatabase. I created Events.java. It has getter and setters. MyAdapter is adapting for RecyclerView on AllEvents.java. I want to show all data on AllEvents.java.
But I cannot success. Can you help me?

MyAdapter.java:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
Context context;
ArrayList<Events> list;
public MyAdapter(Context context, ArrayList<Events> list) {
    this.context = context;
    this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(context).inflate(R.layout.evententry,parent,false);
    return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    Events events = list.get(position);
    holder.plan.setText(events.getPlan());
    holder.note.setText(events.getNote());
    holder.date.setText(events.getDate());
    holder.time.setText(events.getTime());
    holder.remb.setText(events.getRemb());
}
@Override
public int getItemCount() {
    return list.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
    TextView id, plan, note, date, time, remb;
    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        id = itemView.findViewById(R.id.tvIdCard);
        plan = itemView.findViewById(R.id.tvPlanCard);
        note = itemView.findViewById(R.id.tvNoteCard);
        date = itemView.findViewById(R.id.tvDateCard);
        time = itemView.findViewById(R.id.tvTimeCard);
        remb = itemView.findViewById(R.id.tvRememberCard);
    }
}

MyEvents.java

public class AllEvents extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList<Events> list;
DatabaseReference dbRef;
MyAdapter adapter;

@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(AllEvents.this, MainActivity.class));
    finish();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_events);

    recyclerView = findViewById(R.id.recycleView);
    dbRef = FirebaseDatabase.getInstance().getReference("Events");
    list = new ArrayList<>();
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MyAdapter(this, list);
    recyclerView.setAdapter(adapter);
    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for(DataSnapshot dataSnapshot: snapshot.getChildren()){
                Events events = dataSnapshot.getValue(Events.class);
                list.add(events);
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}
}

Events.java

public class Events {
String id;
String plan;
String note;
String date;
String time;
String remb;

public Events(String id, String plan, String note, String date, String time, String remb) {
    this.id = id;
    this.plan = plan;
    this.note = note;
    this.date = date;
    this.time = time;
    this.remb = remb;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getPlan() {
    return plan;
}
public void setPlan(String plan) {
    this.plan = plan;
}
public String getNote() {
    return note;
}
public void setNote(String note) {
    this.note = note;
}
public String getDate() {
    return date;
}
public void setDate(String date) {
    this.date = date;
}
public String getTime() {
    return time;
}
public void setTime(String time) {
    this.time = time;
}
public String getRemb() {
    return remb;
}
public void setRemb(String remb) {
    this.remb = remb;
}
}

My Database is:
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自演自醉 2025-02-14 11:31:21

首先尝试使它们成为event类的私人。

private String id;
private String plan;
private String note;
private String date;
private String time;
private String remb;

其次,更改adapter =新的myadapter(this,list);行到此处。此外,您还需要处理oncancelled时。

dbRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for(DataSnapshot dataSnapshot: snapshot.getChildren()){
            Events events = dataSnapshot.getValue(Events.class);
            list.add(events);
        }
        adapter = new MyAdapter(this, list);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        Log.i("???", "onCancelled Error: " + error.getMessage());
    }
});

First try to make them private for the Event class.

private String id;
private String plan;
private String note;
private String date;
private String time;
private String remb;

Second, change adapter = new MyAdapter(this, list); line to here. Additional here, you need handle whenonCancelled also.

dbRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for(DataSnapshot dataSnapshot: snapshot.getChildren()){
            Events events = dataSnapshot.getValue(Events.class);
            list.add(events);
        }
        adapter = new MyAdapter(this, list);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        Log.i("???", "onCancelled Error: " + error.getMessage());
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文