[英]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.