从 firebase 获取数据时出现 setText 问题

Issue with setText while getting data from firebase

我在 Firebase 中有 2000 个报价。我有两个按钮,第一个和最新的。顾名思义,当我点击 'first' 时,它会在日志中显示来自 Firebase 的第一个数据,而 'latest' 也是如此,当我点击它时,它会获取并显示来自 Firebase 的最新数据在日志中。

问题是当我尝试设置文本时,它显示了一个随机引用,我不知道我应该怎么做。我问了这个关于如何从 Firebase 获取第一个和最后一个数据,我也收到了答案,但问题是我无法设置正确的数据。

private void latestQuote() {
    DatabaseReference db = FirebaseDatabase.getInstance().getReference();
    DatabaseReference quotesRef = db.child("Quotes");
    Query queryForFirstElement = quotesRef.orderByKey().limitToLast(1); //
    queryForFirstElement.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (task.isSuccessful()) {
                for (DataSnapshot qs : task.getResult().getChildren()) {
                    String title = qs.child("title").getValue(String.class);
                    Log.d("TAG", title);
                    quotes_list.add(title);
                    position = randomQ.nextInt(quotes_list.size());
                }
                quotesTxt.setText(quotes_list.get(position));
                countTxt.setText(position + "/" + quotes_list.size());
            } else {
                Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
            }
        }
    });
}

private void firstQuote() {
    DatabaseReference db = FirebaseDatabase.getInstance().getReference();
    DatabaseReference quotesRef = db.child("Quotes");
    Query queryForFirstElement = quotesRef.orderByKey().limitToFirst(1); //
    queryForFirstElement.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (task.isSuccessful()) {
                for (DataSnapshot qs : task.getResult().getChildren()) {
                    String title = qs.child("title").getValue(String.class);
                    Log.d("TAG", title);
                    quotes_list.add(title);
                    position = randomQ.nextInt(quotes_list.size());
                }
                quotesTxt.setText(quotes_list.get(position));
                countTxt.setText(position + "/" + quotes_list.size());
            } else {
                Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
            }
        }
    });

}

我很确定这是因为这一行 position = randomQ.nextInt(quotes_list.size()); 而发生的,但即使我删除它,它也不会在文本视图中设置任何文本,但仍会在日志。

这是一个关于我如何获取其他数据的示例,这个方法非常有效:

@SuppressLint("SetTextI18n")
private void back() {  
    if (position > 0) {
        position = (position - 1) % quotes_list.size();
        quotesTxt.setText(quotes_list.get(position));
        countTxt.setText(position + "/" + quotes_list.size());
    }
}

@SuppressLint("SetTextI18n")
private void next() {
    position = (position + 1) % quotes_list.size();
    quotesTxt.setText(quotes_list.get(position));
    countTxt.setText(position + "/" + quotes_list.size());
}

@SuppressLint("SetTextI18n")
private void random() {
    position = randomQ.nextInt(quotes_list.size());
    quotesTxt.setText(quotes_list.get(position));
    countTxt.setText(position + "/" + quotes_list.size());
}

根据评论中的要求添加 Model.class

public class Model {
    String title;

    public Model() {
    }

    public Model(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
check after forloop i have written


[1]: https://i.stack.imgur.com/pH9Ft.png