Объект массива в firestore возвращает значение null, а другие поля - нет. - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь получить данные документа в объект моего настраиваемого класса и отобразить значения массива в recyclerview. Проблема, с которой я столкнулся, заключается в том, что все другие поля извлеченного документа, ну, извлекаются, за исключением объекта массива 'products', который возвращает значение null.

enter image description here

Мой собственный класс объекта:

    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)

Есть идеи, как это решить?

1 Ответ

0 голосов
/ 16 июня 2020

Ваш получатель и методы getProds() и setProds() не соответствуют имени поля «продукты». Вы можете либо переименовать методы getProducts() и setProducts(), либо переименовать поле «prods», чтобы они совпадали.

...