从firebase检索列表
问题描述:
我知道如何获取一个简单的列表,但有问题时,如果节点嵌套像用户输入一个文本框,他想Section1的学生列表,然后只有杰里和肖恩与他的辊没有应该被显示。 这是我的一个简单列表的代码。从firebase检索列表
public class MainActivity extends AppCompatActivity {
ListView listView;
DatabaseReference dref;
ArrayList<String> list=new ArrayList<>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.ListView);
adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
dref= FirebaseDatabase.getInstance().getReference();
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value=dataSnapshot.getValue(String.class);
list.add(value);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
String value=dataSnapshot.getValue(String.class);
list.remove(value);
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
JSON树:
请建议我该怎么做。
答
由于您将ChildEventListener
附加到数据库的根目录,因此将为每个部分调用onChildAdded
的快照。所以一次为Section1
,一次为Section2
,一次为Section3
。
如果你想只侦听特定部分,你的听众连接至该节:
dref= FirebaseDatabase.getInstance().getReference();
dref.child("Section1").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String key = dataSnapshot.getKey();
int value = dataSnapshot.getValue(Integer.class);
list.add(key+": "+value);
adapter.notifyDataSetChanged();
}
在上面的,因为你只是听Section1
,你onChildAdded
将触发一次Jerry
和一次用于Sean
。但这些快照现在是键,所以代码使用getKey()
。
另一方面:如果您想要显示所有部分的学生,您需要将您的侦听器保留在根目录并访问原始快照的较低级属性。为此,您需要使用getChild()
才能到达酒店,或者使用getChildren()
来访问所有酒店。
dref= FirebaseDatabase.getInstance().getReference();
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for (DataSnapshot student: dataSnapshot.getChildren()) {
String value=student.getValue(String.class);
list.add(value);
}
adapter.notifyDataSetChanged();
}
请问有什么办法同时显示名称和值像我的列表中它只是显示滚动no.And非常感谢你为解决 – fuk
我更新了第一个片段使用'信息getKey()'和' getValue(Integer.class)'来获取名称和值。 –