繁体   English   中英

从 Firestore 获取 null arraylist

[英]Getting null arraylist from Firestore

我有一个简单的 android 应用程序,用户可以在其中创建文件夹并将 PDF 上传到他们。 PDF 将上传到 Firebase 存储,并将使用存储在 Firestore 中的 URL 获取它们。 获取的 PDF 将显示在 RecyclerView 中。 我正在获取 pdf 的 URL 和名称,并将它们存储在 arraylist 中。 当我尝试在 OnCompleteListener 之外访问这个 arraylist 时,我得到了一个 NPE。 我认为这是因为 Firebase API 的异步特性。 因此,在观看Alex Mamo 的视频后,我尝试使用界面。 但我仍然遇到同样的错误。 有没有其他方法可以在没有接口的情况下使用 onSuccessListener 或 OnCompleteListener? 我应该在哪里安装recyleradapter?

我的代码:

package com.example.XX;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.List;
import java.util.Map;

public class ViewDocActivity extends AppCompatActivity {

    private TextView fName;
    private RecyclerView pdfRecView;
    PdfAdapter adapter;
    List<String> pdfUrlList;
    List<String> pdfNameList;
    String folder_name;
    String pdfName;
    String pdfUrl;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();


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

        Intent intent = getIntent();

        folder_name = intent.getStringExtra("folderClicked");
        fName = findViewById(R.id.fName_tv);
        fName.setText(folder_name);

        pdfRecView = findViewById(R.id.pdfRecyclerView);
        pdfRecView.setLayoutManager(new LinearLayoutManager(this));


        db.collection(folder_name)
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                pdfName = document.getString("name");
                                pdfUrl = document.getString("url");

                                Log.d("nameTest", "onComplete: " + pdfName);
                                Log.d("urlTest", "onComplete: " + pdfUrl);
                                pdfNameList.add(pdfName);
                                pdfUrlList.add(pdfUrl);
                            }

                        } else {
                            Log.d("TAG", "Error getting documents: ", task.getException());
                        }
                    }
                });

        adapter = new PdfAdapter(pdfUrlList, pdfNameList);//todo pdfNameList and url list should be fetched from Firestore before this
        pdfRecView.setAdapter(adapter);
        adapter.notifyDataSetChanged();

    }

}

在使用它们之前尝试在 onCreate 中初始化数组列表

pdfUrlList = new ArrayList<string>();

pdfNameList = new ArrayList<string>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM