当前位置: 首页 > 知识库问答 >
问题:

使用FirestoreRecyclerAdapter,但无法从Firebase查询任何数据

公良鸿光
2023-03-14

根据https://github . com/firebase/firebase ui-Android/tree/master/firestore上的指南,我用FirestoreRecyclerAdapter制作了一个项目列表,但我不知道为什么无法检索任何数据。事实上,数字视图项目显示正确,但内容总是空的。任何人都可以帮我。下面是源代码:

活动:

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

private FirebaseFirestore mDatabase;
private ViewPager mViewPager;

private CollectionReference mOrderRef;
private OrderAdapter mOrderAdapter;

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

    mDatabase = FirebaseFirestore.getInstance();
    mOrderRef = mDatabase.collection("order");
    Query query = mOrderRef.limit(1000);
    FirestoreRecyclerOptions<OrderInfo> options = new FirestoreRecyclerOptions.Builder<OrderInfo>().setQuery(query, OrderInfo.class).build();
    mOrderAdapter = new OrderAdapter(options);

    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view_order_list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(mOrderAdapter);
}

@Override
protected void onStart() {
    super.onStart();
    mOrderAdapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    mOrderAdapter.stopListening();
}

适配器:

    public class OrderAdapter extends FirestoreRecyclerAdapter<OrderInfo, OrderAdapter.OrderHolder> {

    /**
     * Create a new RecyclerView adapter that listens to a Firestore Query.  See {@link
     * FirestoreRecyclerOptions} for configuration options.
     *
     * @param options
     */
    public OrderAdapter(@NonNull FirestoreRecyclerOptions<OrderInfo> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull OrderHolder holder, int position, @NonNull OrderInfo model) {
        holder.txtTitle.setText(String.valueOf(model.getTitle()));
        holder.txtCusName.setText(String.valueOf(model.getCusName()));
        holder.txtDate.setText(String.valueOf(model.getDate()));
    }

    @NonNull
    @Override
    public OrderHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.order_item, parent, false);
        return new OrderHolder(view);
    }


    class OrderHolder extends RecyclerView.ViewHolder{
        TextView txtCusName;
        TextView txtTitle;
        TextView txtDate;

        public OrderHolder(@NonNull View itemView) {
            super(itemView);
            txtCusName = itemView.findViewById(R.id.txt_customer_name);
            txtTitle = itemView.findViewById(R.id.txt_title);
            txtDate = itemView.findViewById(R.id.txt_date);
        }
    }
}

数据模型:

    public class OrderInfo {

    private String mTitle;
    private String mCusName;
    private String mDate;

    public OrderInfo(){
        //default constructor
    }

    public OrderInfo(String title, String name, String date) {
        this.mTitle = title;
        this.mCusName = name;
        this.mDate = date;
    }

    public String getTitle() {
        return mTitle;
    }

    public String getCusName() {
        return mCusName;
    }

    public void setCusName(String cusName) {
        this.mCusName = cusName;
    }
    public String getDate() {
        return mDate;
    }
}

共有1个答案

谢承颜
2023-03-14

您的数据模型与数据库结构不一致。尝试更新如下:

public class OrderInfo {

    private String title;
    private String name;
    private String date;

    public OrderInfo(){
        //default constructor
    }

    public OrderInfo(String title, String name, String date) {
        this.title = title;
        this.name = name;
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public String getName() {
        return name;
    }

    public String getDate() {
        return date;
    }
}

除此之外,不要忘记将您的项目与Firebase Firestore同步

 类似资料:
  • 该库只支持Double、Boolean和String。我现在真困惑。怎么可能?

  • 我正试图从firebase数据库中获取项目列表。。。但我很难得到它们。我的代码大致如下: 应该返回我的项目的方法如下所示: GetItems()总是返回一个空列表,这有点道理,因为在我返回这个列表之前,没有什么可以触发onDataChange事件,所以我的问题是。。。如何使用此方法从DB返回项目列表?

  • 我正在尝试在Firebase中进行简单搜索以从我的Firebase数据中返回数据,但没有任何返回。 JSON结构 我的Firebase搜索代码如下 但一旦代码被执行,它就会返回null。还有一种方法可以搜索特定字段。

  • 我有一个关于查询的问题,我实际上是在尝试膨胀视图,其中添加为朋友的人可以添加到回收器视图。 错误是: 原因:com。fasterxml。杰克逊。数据绑定。exc.UnrecognizedPropertyException:无法识别的字段“sahaj9917730102@gmail“(class.com.rana.sahaj.myyu.FriendsData),未标记为可忽略(5个已知属性:,”st

  • 好吧,我的问题是这段代码没有返回任何内容,至少它没有打印任何内容。唯一有效的方法是$user_email,它可以打印用户的电子邮件。 代码: “用户”表包含7个不同的键: ID(bigint,主键,auto_increment),组(int),电子邮件(varchar),密码(varchar),用户名(varchar),名称(varchar),验证(int)。 "group"表包含3个不同的键:

  • 问题内容: 我正在尝试获取等于的所有条目,但是它什么也不返回。 我在这里做错了什么?而且,以我尝试的方式查询数据的正确方法是什么? JSON: 迅速: 问题答案: 您需要使用to,而不是使用equalTo