【问题标题】:Reading data from my firebase database to activity从我的 firebase 数据库读取数据到活动
【发布时间】:2020-05-20 02:51:55
【问题描述】:

我是 android studio 的初学者。几个星期以来,我一直试图从我的数据库中读取数据到我的活动(可用游乐设施)。现在我只是将数据从一个活动传输到另一个活动并将其放入文本视图中。

在之前的活动中,我已经设法将数据保存在数据库中。

理想情况下,我希望表格视图显示 3 列。第一个蜂鸣“Deprture”,下一个蜂鸣“Arrival”,第三个蜂鸣“Time”。然后在每一行都有每个孩子。

如果有人能帮助我,我将非常感激!

提前谢谢你!

可用的游乐设施活动:

public class AvailableRides extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_available_rides);

    // Get the Intent that started this activity
    Intent intent = getIntent();
    String messageTime = intent.getStringExtra(DisplayMessageActivity.EXTRA_MESSAGE);
    String messageDep = intent.getStringExtra(DisplayMessageActivity.EXTRA_MESSAGE1);
    String messageArr = intent.getStringExtra(DisplayMessageActivity.EXTRA_MESSAGE2);

    // Capture the layout's TextView and set the string as its text
    TextView textView1 = findViewById(R.id.textView26);
    textView1.setText(messageTime);
    TextView textView2 = findViewById(R.id.textView2);
    textView2.setText(messageDep);
    TextView textView3 = findViewById(R.id.textView4);
    textView3.setText(messageArr);
}

Firebase 数据库

【问题讨论】:

标签: android firebase-realtime-database tableview


【解决方案1】:

假设 Trips 节点是 Firebase 根的直接子节点,要显示该数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference tripsRef = rootRef.child("Trips");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String arrival = ds.child("Arrival").getValue(String.class);
            String departure = ds.child("Departure").getValue(String.class);
            String time = ds.child("Time").getValue(String.class);
            Log.d("TAG", arrival + " / " + departure  + " / " + time);
            list.add(time);
        }
        Log.d("TAG", time);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
tripsRef.addListenerForSingleValueEvent(valueEventListener);

您的输出将是:

aaaaaa / abababa / 10:00
bbbb / bcbc / 10:00

【讨论】:

  • 非常感谢!我现在如何让数据显示在表格上?只是将日志分配给表格视图?
  • 这是最简单的部分。创建一个列表,将这些值添加到,创建一个适配器,然后将适配器设置为所需的视图。
  • 谢谢!!如何从这些值创建一个列表(例如字符串时间列表)?
  • 在我更新的答案中。你觉得我的回答对你有帮助吗?
  • 其实我不需要添加一个适配器来在列表视图中显示数据吗?我尝试在创建列表后立即创建适配器。这是正确的方法吗?
【解决方案2】:

您可以创建一个根并选择它。然后在该根目录中检索您的快照中的所有相应数据。这是一个示例代码:

Firebase yourDataRef = mRootRef.child("data");
yourDataRef .addValueEventListener(new com.firebase.client.ValueEventListener() {
    @Override
    public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {


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

            String messageTime = snapm.child("0").getValue(String.class);
            String messageDep = snapm.child("1").getValue(String.class);
            String messageArr = snapm.child("2").getValue(String.class);
            }
        }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
        throw firebaseError.toException();

    }
});

【讨论】:

    【解决方案3】:
    enter code here content1 = (TextView)findViewById(R.id.con);
        course = (TextView)findViewById(R.id.co);
        reset_button = (Button)findViewById(R.id.reset);
        reference = FirebaseDatabase.getInstance().getReference().child("course data").child("1");
        reset_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
               reference.addListenerForSingleValueEvent(new ValueEventListener() {
                   @Override
                   public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                       try {
                           String couure_details = dataSnapshot.child("title").getValue(String.class);
                           String course_content =dataSnapshot.child("contant").getValue(String.class);
                           content1.setText(course_content);
                           course.setText(couure_details);
                       }catch (Exception e)
                       {
                           Toast.makeText(userActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                       }
    
                   }
    
                   @Override
                   public void onCancelled(@NonNull DatabaseError databaseError) {
    
                   }
               });
    

    【讨论】:

    • 没有任何解释的代码转储很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的问题并解释它如何比OP提供的更好。
    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多