【问题标题】:Array object in firestore returns null while other fields aren'tfirestore 中的数组对象返回 null 而其他字段不返回
【发布时间】:2020-06-16 17:02:12
【问题描述】:

我正在尝试将文档数据提取到我的自定义类对象中,并将数组值显示到 recyclerview 中。 我遇到的问题是,除了返回 null 的“产品”数组对象之外,已获取文档的所有其他字段都已获取。

我的自定义对象类:

    private String IDliv;
    private String IDpan;
    private ArrayList<Object> products;

    public generalObject() {
    }

    public String getIDliv() {
        return IDliv;
    }

    public void setIDliv(String IDliv) {
        this.IDliv = IDliv;
    }

    public String getIDpan() {
        return IDpan;
    }

    public void setIDpan(String IDpan) {
        this.IDpan = IDpan;
    }

    public ArrayList<Object> getProds() {
        return products;
    }

    public void setProds(ArrayList<Object> prods) {
        this.products = prods;
    }

    public generalObject(String IDliv, String IDpan, ArrayList<Object> prods) {
        this.IDliv = IDliv;
        this.IDpan = IDpan;
        this.products = prods;
    }
}

还有我用来获取数据的代码:

        @Override
        public void onEvent(@Nullable QuerySnapshot documentSnapshots, @Nullable FirebaseFirestoreException e) {
            assert documentSnapshots != null;
            for (DocumentChange document : documentSnapshots.getDocumentChanges()) {
            generalObject obj=document.getDocument().toObject(generalObject.class);
                Toast.makeText(getApplicationContext(),obj.getIDliv().toString(),Toast.LENGTH_LONG).show();
            if(obj.getProds()!=null){
            for(int i=0;i<obj.getProds().size();i++){
                String[] body;
                  body=obj.getProds().get(i).toString().split("\\+");
                ProductModel p = new ProductModel(body[1].toString(), body[2].toString(), body[3].toString());
                prod.add(p);

            }

            }else{
                Toast.makeText(getApplicationContext(),"stuff not clicking",Toast.LENGTH_LONG).show();
            }
            }
    }
    });
        adapter= new ProductAdapter(prod);
        RecyclerView recview= findViewById(R.id.items_recycler_view);
        recview.setHasFixedSize(true);
        recview.setLayoutManager(new LinearLayoutManager(this));
        recview.setAdapter(adapter);

我的错误日志

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.ArrayList.get(int)' on a null object reference
        at com.example.showproducts.MainActivity$1.onEvent(MainActivity.java:56)
        at com.example.showproducts.MainActivity$1.onEvent(MainActivity.java:49)
        at com.google.firebase.firestore.Query.lambda$addSnapshotListenerInternal$2(com.google.firebase:firebase-firestore@@21.4.3:1045)
        at com.google.firebase.firestore.Query$$Lambda$3.onEvent(Unknown Source:6)
        at com.google.firebase.firestore.core.AsyncEventListener.lambda$onEvent$0(com.google.firebase:firebase-firestore@@21.4.3:42)
        at com.google.firebase.firestore.core.AsyncEventListener$$Lambda$1.run(Unknown Source:6)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7529)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

你知道如何解决这个问题吗?

【问题讨论】:

    标签: java android arrays google-cloud-firestore


    【解决方案1】:

    您的 getter 和方法 getProds()setProds() 与“产品”字段的名称不匹配。您可以重命名方法 getProducts()setProducts(),或重命名字段“prods”以使其匹配。

    【讨论】:

    • 我已经更改了它,但它仍然不会在 recyclerview 中显示列表。我尝试了一个简单的 Toast 值显示但没有在 recyclerview 中显示。
    • 如果您有新问题,请单独发布。请务必在新问题中包含重现问题所需的信息。
    • 不,发布一个全新的问题。 Stack Overflow 并不是为了在一篇文章中回答一系列问题。确保包含足够的信息,任何人都可以用来重现新问题。
    猜你喜欢
    • 1970-01-01
    • 2019-12-14
    • 2018-11-14
    • 2015-05-23
    • 1970-01-01
    • 2015-04-13
    • 2021-01-20
    • 2013-07-22
    • 2022-11-08
    相关资源
    最近更新 更多