【问题标题】:Only the last element is shown in Firebase databaseFirebase 数据库中仅显示最后一个元素
【发布时间】:2017-11-14 08:15:44
【问题描述】:

我在 Firebase 中有一个示例数据库,用于显示一些事实。目前,我希望 textview 显示所有五个示例事实 1、2、3、4、5 ..但它只显示最后一个。我应该在哪里修改我的代码?

Java 示例:

fact = database.getInstance().getReference().child("Facts");

        fact.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){

                    Fact factdata = postSnapshot.getValue(Fact.class);

                    factViewBox.setText(factdata.getFactDetail());


                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

还有 json:

"Facts":{
    "01":{
   "factDetail":"1" 
   }
,

"02":{
   "factDetail":"2" 
}
,
"03":{
   "factDetail":"3" 
}
,
"04":{
   "factDetail":"4" 
}
,
"05":{
   "factDetail":"5" 
}

}

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:
     for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){    
        Fact factdata = postSnapshot.getValue(Fact.class); 
        if(factViewBox.getText().length() > 0 ){
             factViewBox.setText(factViewBox.getText() + "\n" + factdata.getFactDetail());
        }else{
             factViewBox.setText(factdata.getFactDetail());
        }
     }
    

    你需要在for循环中改变

    【讨论】:

    • 哇,效果很好!如果您不介意,最后一件事......有没有办法在文本视图上一一显示这些事实?我正在考虑使用按钮在每次单击时显示下一个事实..
    • 问题是我不知道该怎么做。如果您能用示例代码进行演示,我将不胜感激。
    • 检查了它,只是它没有解决如何通过向左或向右滑动屏幕或单击下一个或上一个按钮来逐个显示项目。顺便说一句,我非常感谢您的帮助。
    • 我的意思是,它不清楚它如何解决单击按钮以显示下一个/上一个项目:(
    【解决方案2】:

    您的代码所做的只是将 TextView 中的当前文本替换为 factdata.getFactDetail()

    例如,您有 3 个元素 1、2 和 3。然后您希望在 TextView 中显示该元素。使用您的代码,会发生这种情况

    第一次迭代:

    element = elements[0];        // element = 1
    factViewBox.setText(element); // TextView text is "1"
    

    第二次迭代:

    element = elements[1];        // element = 2
    factViewBox.setText(element); // TextView text is "2"
    

    第三次迭代:

    element = elements[2];        // element = 3
    factViewBox.setText(element); // TextView text is "3"
    

    因此,您的 TextView 仅显示最后一个元素/事实详细信息

    【讨论】:

    • 我现在明白了,谢谢。您能否就我上面提出的后续问题提供任何意见?
    • 所以,您正在考虑使用按钮作为事实之间的导航并将事实显示到相同的TextView?是的,这是可能的。但是您需要先将所有事实存储到一个数组中。在按钮onClick 中,只需使用相同的方法setTextTextView 文本设置为您要显示的当前事实。所以你需要一个array 和一个index 变量。小心经典IndexOutOfBoundsException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2012-01-27
    • 2018-10-30
    相关资源
    最近更新 更多