好吧,所以我生成了一个文档的随机名称,现在我正试图从该文档中获取数据。
namereference
.get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists()){
String names = documentSnapshot.get("dokumentnamen").toString().replace("[", "").replace("]", "");
String [] namelist = names.split(", ");
Random random = new Random();
int randomNumber = random.nextInt(namelist.length);
randomrezeptname = namelist[randomNumber];
}
}
});
}
生成一个随机名称可以正常工作,并且该名称存在。 但是现在我正在尝试在另一个void的DocumentReference中使用该String,但根本无法使用。
DocumentReference documentReference = db.collection("Rezepte").document(this.randomrezeptname);
我总是遇到相同的错误:
无效的文档参考。文档引用的段数必须是偶数,但是Rezepte的段数是1
我尝试使用String的内容,并将其直接放在DocumentReference中,并且可以正常工作。但是我必须使用一个变量,因为它应该显示随机文档。 有任何想法我做错了吗?
答案 0 :(得分:0)
我猜你说的时候
我尝试使用String的内容并将其直接放在DocumentReference中,并且有效
你的意思是你跑了
DocumentReference documentReference = db.collection("Rezepte").document("a_random_recipe_name");
它奏效了,表明您的层次结构还不错。
在您尝试使用随机名称生成器访问随机文档之前,您确定它确实设置了randomrezeptname
吗?我的意思是说,如果您运行:
1) namereference.get().addOnSuccessListener(OnSuccessListener);
2) System.out.println(this.randomrezeptname)
3) DocumentReference documentReference = db.collection("Rezepte").document(this.randomrezeptname)
第2行和第3行可能会在运行OnSuccessListener之前运行,这意味着在OnSuccessListener对其进行设置之前,randomrezeptname
周围的任何行为都会有些奇怪。稍后,OnSuccessListener在主线程上运行,但是要在异步方法返回之后运行。