java - Firebase Cloud Firestore - 将文档获取到自定义对象并将其传递给另一个 Activity

标签 java android firebase android-intent google-cloud-firestore

我正在尝试将存储在 Firebase Cloud Firestore 中的文档保存到我的自定义对象(动物)中。我需要将此对象传递给另一个 Activity 。我使用了 intent.putextra("class name", obj) 函数,但我无法访问我创建的用于获取文档的对象。这是我的代码:

public void start(View view){

String id;
EditText animalIdEditText = findViewById(R.id.animalIDsearch);
String animalId = animalIdEditText.getText().toString();
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("Animals").document(animalId);
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        Animal animal = documentSnapshot.toObject(Animal.class); // this is where I create animal object. It doesn't let me declare it above either.
    }
});

    Intent intent = new Intent(this, searchActivity.class);
    intent.putExtra("Animal",animal); // error in this line : animal  can't be resolved
    startActivity(intent);
}

最佳答案

要解决这个问题,您需要等待数据,为此,您需要像这样创建一个自定义回调:

public interface MyCallback {
    void onCallback(Animal animal);
}

然后您需要创建如下所示的方法:

public void readData(MyCallback myCallback) {
    String id;
    EditText animalIdEditText = findViewById(R.id.animalIDsearch);
    String animalId = animalIdEditText.getText().toString();
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    DocumentReference docRef = db.collection("Animals").document(animalId);
    docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            Animal animal = documentSnapshot.toObject(Animal.class);
            myCallback.onCallback(animal);
        }
    });
}

最后,只需简单地调用 readData() 方法并将 MyCallback 接口(interface)的实例作为参数传递给您在 Activity 中需要的任何地方,如下所示:

readData(new MyCallback() {
    @Override
    public void onCallback(Animal animal) {
        Intent intent = new Intent(this, searchActivity.class);
        intent.putExtra("Animal", animal);
        startActivity(intent);
    }
});

更多信息可以看我在this post的回答 以及此 video .

关于java - Firebase Cloud Firestore - 将文档获取到自定义对象并将其传递给另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390196/

相关文章:

android - DataSnapshot 手动创建

java - 命令按钮在 JSP 文件中不可见

java - .NET 中 Guava 服务的替代方案?

android - 如何使用 Android 通过网络流式传输摄像机流,生成有效的视频文件?

android - Google App Invite 按钮总是指向 Google Play

java - 递增数字作为 Firestore 文档名称?

java - 如果不推荐使用 Swing,还有什么替代方案?

java - 在 Java 中拦截 System.out 和前置日期时间

Android - 多选 ListView 的自定义适配器

angularjs - 使用 AngularFire 时,光标会在键入时跳到字段末尾