【发布时间】:2018-12-05 17:32:22
【问题描述】:
我无法让我的数据库中的项目通过 FirebaseREcyclerAdapter 填充 Recycler 视图。
在活动控制器类中:
private RecyclerView hw_list;
以及在 onCreate() 方法中与 Firebase 的连接:
hw_ref = FirebaseDatabase.getInstance().getReference().child("hardwares");
我在 onStart() 方法中制作适配器:
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<Hardware> options =
new FirebaseRecyclerOptions.Builder<Hardware>().setQuery(hw_ref, Hardware.class).build();
FirebaseRecyclerAdapter<Hardware, AddHardwareViewHolder> adapter = new FirebaseRecyclerAdapter<Hardware, AddHardwareViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull AddHardwareViewHolder holder, int position, @NonNull Hardware model) {
holder.tv_hwTimeStamp.setText("Registered on" + model.getTimestamp());
}
@NonNull
@Override
public AddHardwareViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.hardware_row, viewGroup, false);
AddHardwareViewHolder addHardwareViewHolder = new AddHardwareViewHolder(view);
return addHardwareViewHolder;
}
};
hw_list.setAdapter(adapter);
adapter.startListening();
}
还是在Activity中,我定义了view holder:
public static class AddHardwareViewHolder extends RecyclerView.ViewHolder {
TextView tv_hwTimeStamp;
View mView;
public AddHardwareViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
tv_hwTimeStamp = mView.findViewById(R.id.tv_register_time);
}
}
Here's what the database looks like
以及模型类“硬件”:
public class Hardware {
public String Timestamp;
public String pid;
public Hardware() {}
public Hardware(String Timestamp, String pid) {
this.Timestamp = Timestamp;
this.pid = pid;
}
public String getTimestamp() {
return Timestamp;
}
public void setTimestamp(String Timestamp) {
this.Timestamp = Timestamp;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
}
代码没有错误和警告,但没有显示任何内容。我在 OnStart 方法中添加了断点,我在其中制作了适配器和适配器选项。它们工作正常,代码运行到适配器开始侦听的位置。
但在那之后,这些覆盖方法将永远无法运行。看起来它根本没有从 Firebase 获取数据。但是我的应用程序中需要 Firebase 数据的其他部分都可以正常工作。
FirebaseRecyclerAdapter<Hardware, AddHardwareViewHolder> adapter = new FirebaseRecyclerAdapter<Hardware, AddHardwareViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull AddHardwareViewHolder holder, int position, @NonNull Hardware model) {
holder.tv_hwTimeStamp.setText("Registered on" + model.getTimestamp());
}
@NonNull
@Override
public AddHardwareViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.hardware_row, viewGroup, false);
AddHardwareViewHolder addHardwareViewHolder = new AddHardwareViewHolder(view);
return addHardwareViewHolder;
}
};
所以 Recycler 视图中没有放入任何项目,logcat 给我这个:
2018-12-05 11:47:50.282 17420-17420/com.apocalyvec.uitest3 E/RecyclerView: No layout manager attached; skipping layout
我现在真的不知道该怎么做。也许我做错了一些配置或初始化。
【问题讨论】:
-
This 是一种推荐的方式,您可以通过这种方式从 Firebase 实时数据库中检索数据并使用
FirebaseRecyclerAdapter将其显示在RecyclerView中。
标签: android firebase android-recyclerview