【问题标题】:Android - RecyclerView not workingAndroid - RecyclerView 不工作
【发布时间】:2018-03-26 10:49:08
【问题描述】:

我正在尝试从我的 Firebase 数据库中检索数据,但我的屏幕没有显示任何内容。我没有看到任何错误,所以我不知道为什么什么也没发生。任何人都可以发现任何错误吗?在 stackoverflow 成员的帮助下,我遵循了 FirebaseUI 指南。数据应在屏幕上显示街道和用户

片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_stopandmap, container, false);

    Query keyQuery = FirebaseDatabase.getInstance().getReference("/Addresses/Street 10/users");
    DatabaseReference dataRef = FirebaseDatabase.getInstance().getReference("/User");
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    FirebaseRecyclerOptions<User> options = new FirebaseRecyclerOptions.Builder<User>()
            .setIndexedQuery(keyQuery, dataRef, User.class)
            .build();

    FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<User, BetViewHolder>(options) {
        @Override
        public BetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_row, parent, false);

            return new BetViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(BetViewHolder holder, int position, User model) {
            holder.setUserName(model.getUsername());
        }


    };

    recyclerView.setAdapter(adapter);

    return rootView;


}


public static class BetViewHolder extends RecyclerView.ViewHolder {

    TextView tw;

    public BetViewHolder(View itemView) {
        super(itemView);

        tw = (TextView) itemView.findViewById(R.id.usersTextview);
    }

    public void setUserName(String username) {
        tw.setText("Hej" + username);
        Log.e("Activity", "In Vehicle " + username);

    }
}

用户类别:

public class User {
    private String username;
    private String usertype;

    public User() {
    }

    public String getUsername() {
        return this.username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsertype() {
        return usertype;
    }

    public void setUsertype(String usertype) {
        this.usertype = usertype;
    }
}

【问题讨论】:

  • 调试检查适配器内容是否有数据
  • 我用 adapter.getItemCount 检查了适配器是否为空,结果发现它是空的。我不明白为什么它是空的
  • 这是因为 keyQuery 和 dataRef 指向不同的 firebase 节点。两者都应该指向同一个父节点。
  • 您应该尝试在AsyncTask 中实现您的数据库代码,因为它会大量填充主线程
  • brijesh kumar - 如果两者都指向地址节点,我可以获取用户名吗?

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

在 FirebaseUI 3.0 版中,您需要在适配器上显式调用 startListening() & stopListening() 以指示它开始/停止从数据库中检索数据。

适配器生命周期 - 在以前的版本中,适配器开始监听 在实例化后立即调用cleanup() 停止 听。在 3.x 中,您必须显式调用 startListening()stopListening() 或将 LifecycleOwner 传递给选项生成器。

来源:Upgrading to FirebaseUI 3.0

【讨论】:

    猜你喜欢
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多