firebase 到 listview android studio

Posted

技术标签:

【中文标题】firebase 到 listview android studio【英文标题】:firebase to listview android studio 【发布时间】:2021-12-18 06:36:48 【问题描述】:

这是我的数据库,我想从 firebase 检索数据(红色下划线)到 Listview。

This is the picture of my XML code

这是我的java代码:

public class TimeTableActivity extends AppCompatActivity 

    ListView table01;
    DatabaseReference Trainline;
    ArrayList<String> arrayList= new ArrayList<>();
    ArrayAdapter<String> arrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_time_table);
        Trainline= FirebaseDatabase.getInstance().getReference("Time_table");
        table01 = findViewById(R.id.table01);
        arrayAdapter = new ArrayAdapter<String>( TimeTableActivity.this, android.R.layout.simple_list_item_1);
        table01.setAdapter(arrayAdapter);

        Trainline.addChildEventListener(new ChildEventListener() 
            @Override
            public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName)     
            

            @Override
            public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName)     
            

            @Override
            public void onChildRemoved(@NonNull DataSnapshot snapshot)     
            

            @Override
            public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName)     
            

            @Override
            public void onCancelled(@NonNull DatabaseError error)     
            
        );    
        

【问题讨论】:

【参考方案1】:

onChildAdded你可以:

    从快照中读取值 将其添加到适配器所基于的列表中 告诉适配器刷新自己

在代码中:

arrayAdapter = new ArrayAdapter<String>(TimeTableActivity.this, 
                                        android.R.layout.simple_list_item_1, arrayList);
                                                                          // ? Add this
 Trainline.addChildEventListener(new ChildEventListener() 
    @Override
    public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName)     
        String value = snapshot.child("time_table").getValue(String.class);  // ? 1. Get the value
        arrayList.add(value); // ? 2. Add to the array
        arrayAdapter.notifyDataSetChange(); // ? 3. Tell the adapter to repaint.
    
    ...

【讨论】:

首先感谢弗兰克对我的帮助...我尝试了您的代码然后转到时间表活动突然应用程序将自动停止...这是为什么? 这很难说没有看到错误。我建议查看***.com/questions/23353173/… 是的......明白了......现在它工作得很好,再次感谢弗兰克...... 是的,你的答案是正确的。我已经投票了,但在这里收到这样的消息“感谢您的反馈!您需要至少 15 个声望才能投票,但您的反馈已被记录。” 嘿@Lakruwan 您应该能够接受答案(通过单击旁边的复选标记),因为您发布了问题。【参考方案2】:

当您读取 firebase 数据库中的数据时,您应该检索整个数据。因此,无法从读取路径返回的数据中仅获取特定字段。

因此,如果您的情况可能,我建议您在 firebase 中添加新数据,以便仅检索您需要的信息。

为此,您可以拥有一个单独的节点,该节点可以称为 TimeTable-SpecificList 之类的名称。现在,在此表中,将用户 uid 作为您的子键,并且每个条目应只有一个您要获取的 timeTableSpecific 字段。

例子:

replicaTimeTable :
      key1: 
           timeTableSpecific: "Colombo-Gampaha ..."
      ,
      key2: 
           timeTableSpecific: "Colombo-Kandy ..."
      ,
      key3: ...,


这个解决方案可以最大限度地减少下载冗余并优化速度!

参考:Fetch particular fields from Firebase database

【讨论】:

以上是关于firebase 到 listview android studio的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 firebase 检索到 ListView?

如何从 Firebase 检索数据到 ListView(使用自定义数组适配器)

我如何从firebase检索数据到android listview顶部[重复]

从 Firebase 向 ListView 添加条目

如何使用 firebase 获取 listView 中每个项目的数据?

Firebase(Android):我的listView上没有显示图像,一旦我第一次将它上传到存储