java - 无法评估 FirebaseFirestore DocumentReference 的 OnCompleteListener 之外的全局字符串变量
问题描述
我正在尝试作为经过身份验证的用户(根据定义的规则)从我的 Firebase Firestore 中检索数据,并且我也能够检索相同的数据,
但是,当我将数据存储在全局字符串中时,字符串变量仅包含在 Listener 函数范围内和函数之外,它会给出NullPointerException。
为了理解它,我在函数内部和外部都烤了变量。侦听器内的 toast 显示数据,但侦听器外部的 toast 返回"null null"
。
公告.java
public class Announcement extends AppCompatActivity {
FirebaseFirestore db;
String header[],body[];
ArrayList<String> data;
Map<String, Object> data2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_announcement);
db = FirebaseFirestore.getInstance();
header=new String[4];
body=new String[4];
DocumentReference docRef = db.collection("Announcements").document("1");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d("", "DocumentSnapshot data: " + document.getData());
header[1] = document.getString("Header1");
header[2] = document.getString("Header2");
header[3] = document.getString("Header3");
body[1] = document.getString("Body1");
body[2] = document.getString("Body2");
body[3] = document.getString("Body3");
Toast.makeText(Announcement.this, header[1]+" "+body[1], Toast.LENGTH_LONG).show();
} else {
Log.d("", "No such document");
}
} else {
Log.d("", "get failed with ", task.getException());
}
}
});
Toast.makeText(this, header[1]+" "+body[1], Toast.LENGTH_LONG).show();
}
解决方案
推荐阅读
- ios - didSelectItemAt() 没有加载我的 viewController
- nginx - 如何让nginx返回节点返回消息?
- javascript - 与参数相同的函数调用顺序。Javascript
- amazon-web-services - 如何使用 Boto3 传递明确的 Null 值?
- c# - 如何在datagridview windows窗体c#中使用运行时条件在新列中添加当前缺失值
- java - 在图和子图上表示和执行 IO
- jenkins - 从根目录(/)而不是工作区读取的 Job-dsl 脚本 - Jenkins
- python - 预计会看到 1 个数组,但得到了以下 3 个数组的列表
- c# - 将属性传递给读/写方法
- reactjs - React/Redux 延迟加载数据