[Firestore Data image
当我运行程序并单击按钮时,它的意思是从我的数组中选择一个随机索引并显示内容。随机数等在到达for循环并且从数组中检索不到任何数据时都正常工作
我已经使用谷歌搜索了一段时间,只是在尝试不同的事情时感到困惑。对不起,我对Java和Android Studio还是很新
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 () );
}
} );
}
任何帮助将不胜感激
最佳答案
如果您使用以下代码行:
Random rn = new Random();
int RN = rn.nextInt(14);
FactRef.whereArrayContains("facts", RN).get().addOnSuccessListener(/* ... */);
要基于等于0到14之间的数字的索引从
facts
数组返回一个随机项,请注意这是不可能的。您无法根据特定索引使用RNDFacts
查询whereArrayContains()
集合。该方法正在搜索与其自身相同的项目。例如,如果要在数组中搜索:超人并不总是飞
这是您应该使用的查询:
String fact = "Superman Didn't Always Fly";
FactRef.whereArrayContains("facts", fact).get().addOnSuccessListener(/* ... */);
如果要从
facts
数组中获取随机项,则应获取整个文档get the facts
array property as a List<String>
并使用以下几行:List<String> facts = (List<String> facts) document.get(facts);
Random rn = new Random();
int RN = rn.nextInt(facts.size());
String fact = facts.get(RN);