Java for循环返回空,单击时不显示任何内容
[ 当我运行程序并单击按钮时,它意味着从我的数组中选择一个随机索引并显示内容。当随机数等到达for循环时,它将不从数组中检索任何数据 我已经在谷歌上搜索了一段时间,只是在尝试不同的东西时把自己弄糊涂了。对不起,我对java和android studio非常陌生Java for循环返回空,单击时不显示任何内容,java,android,arrays,firebase,google-cloud-firestore,Java,Android,Arrays,Firebase,Google Cloud Firestore,[ 当我运行程序并单击按钮时,它意味着从我的数组中选择一个随机索引并显示内容。当随机数等到达for循环时,它将不从数组中检索任何数据 我已经在谷歌上搜索了一段时间,只是在尝试不同的东西时把自己弄糊涂了。对不起,我对java和android studio非常陌生 public void onClick(View view) { txtDisplay = findViewById ( R.id.textViewDisplay ); int color = cCo
public void onClick(View view) {
txtDisplay = findViewById ( R.id.textViewDisplay );
int color = cColorWheel.getColor ();
txtDisplay.setBackgroundColor ( color );
//=========================================
Random rn = new Random ();
int RN = rn.nextInt ( 14 );
//========================================================
FactRef.whereArrayContains ( "facts", RN ).get ()
.addOnSuccessListener ( new OnSuccessListener<QuerySnapshot> () {
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
StringBuilder data = new StringBuilder ();
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Fact note = documentSnapshot.toObject ( Fact.Class );
note.setDocumentId ( documentSnapshot.getId () );
String documentId = note.getDocumentId ();
data.append ( "Id:" ).append ( documentId );
for (String tag : note.getTags ()) {
data.append ( "\n-" ).append ( tag );
}
data.append ( "\n\n" );
}
txtDisplay.setText ( data.toString () );
}
} );
}
公共void onClick(视图){
txtDisplay=findviewbyd(R.id.textViewDisplay);
int color=cColorWheel.getColor();
txtDisplay.setBackgroundColor(颜色);
//=========================================
Random rn=新的Random();
int RN=RN.nextInt(14);
//========================================================
FactRef.whererraycontains(“facts”,RN).get()
.addOnSuccessListener(新的OnSuccessListener(){
成功时公共无效(QuerySnapshot QueryDocumentSnapshot){
StringBuilder数据=新的StringBuilder();
用于(QueryDocumentSnapshot文档快照:QueryDocumentSnapshot){
事实注释=documentSnapshot.toObject(事实类);
note.setDocumentId(documentSnapshot.getId());
字符串documentId=note.getDocumentId();
data.append(“Id:”).append(documentId);
for(字符串标记:note.getTags()){
data.append(“\n-”).append(标记);
}
data.append(“\n\n”);
}
txtDisplay.setText(data.toString());
}
} );
}
如果您使用以下代码行,将非常感谢您的帮助:
Random rn = new Random();
int RN = rn.nextInt(14);
FactRef.whereArrayContains("facts", RN).get().addOnSuccessListener(/* ... */);
若要基于等于0到14之间的数字的索引从事实
数组中返回一个随机项,请不要认为这是不可能的。您无法使用whererraycontains()查询RNDFacts
集合
基于特定索引。该方法正在搜索与其自身相同的项目。例如,如果要在数组中搜索:
超人并不总是飞
这是您应该使用的查询:
String fact = "Superman Didn't Always Fly";
FactRef.whereArrayContains("facts", fact).get().addOnSuccessListener(/* ... */);
如果要从facts
数组中获取随机项,应获取整个文档,并使用以下行:
List<String> facts = (List<String> facts) document.get(facts);
Random rn = new Random();
int RN = rn.nextInt(facts.size());
String fact = facts.get(RN);
List facts=(List facts)document.get(facts);
Random rn=新的Random();
int RN=RN.nextInt(facts.size());
字符串fact=facts.get(RN);
您可以显示一个您认为应该选择的示例文档吗?另外:您可以尝试使用硬编码值而不是RN
?我建议尝试一个数字(例如4
)和与字符串相同的数字(“4”
)。好的,随时通知我。试试看,告诉我它是否有效。好的,我想我在这件事上迷路了。对不起-FactRef
应该是CollectionReference
而不是DocumentReference
。你应该取消对文档(“事实”)的调用
。它是这样工作的吗?出于某种原因,括号中列出的事实仍然保留着,我不确定我是如何做到的,但我已经做到了,并且代码显示了随机事实:)非常感谢您的帮助,因为它给了我惊人的帮助;)