[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);

09-15 23:30