首页 > 解决方案 > 无法评估 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();
}

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


推荐阅读