我正在尝试将存储在 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);
}
});
关于java - Firebase Cloud Firestore - 将文档获取到自定义对象并将其传递给另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390196/