【问题标题】:Android, Firebase Recycler Adapter is not querying the databaseAndroid,Firebase Recycler Adapter 未查询数据库
【发布时间】: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


【解决方案1】:
2018-12-05 11:47:50.282 17420-17420/com.apocalyvec.uitest3 E/RecyclerView: No layout manager attached; skipping layout

您没有将任何布局管理器附加到 recyclerView。所以修改后的代码将是:-

hw_list.setAdapter(adapter);
hw_list.setLayoutManager(new LinearLayoutManager(context));
adapter.startListening();

这里的上下文是活动上下文。 也可以使用GridLayoutManager等。

【讨论】:

  • @ApocalyVec,如果我的回答解决了您的问题,请接受并投票。
猜你喜欢
  • 2020-10-16
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2021-02-16
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多