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检索数据到android listview顶部[重复]