java - 如何使用多个 firebase 项目填充 ListView

标签 java android firebase listview firebase-realtime-database

我正在为安卓开发一个社交应用 我正在尝试从 firebase 检索数据并显示(至少 15 项) 问题是我的代码只显示第一项 这是我的代码

FirebaseHelper

public class FirebaseHelper {
 DatabaseReference db;
 ArrayList<Questions> questionEntries =new ArrayList<>();
public FirebaseHelper(DatabaseReference db)  {
    this.db=db;
    }

private void fetchData (DataSnapshot dataSnapshot){
questionEntries.clear();
    Questions questions = dataSnapshot.getValue(Questions.class);
    questionEntries.add(questions);}


public ArrayList<Questions> retreive (){
db.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        fetchData(dataSnapshot);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        fetchData(dataSnapshot);
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
return questionEntries;
}

这是显示列表的我的 Activity

public class Actu extends Fragment {
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.activity_actu, container, false);
    lv = (ListView) v.findViewById(R.id.actu_rv);
    db = FirebaseDatabase.getInstance().getReference("Questions");

    helper = new FirebaseHelper(db);
    adapter = new QuestionAdapter(getContext(),helper.retreive());
    lv.setAdapter(adapter);


    return v;        }
}

This my firebase database structure

最佳答案

以下是您可以执行的操作:

public ArrayList<Questions> retreive (){
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    Questions questions = dataSnapshot.getValue(Questions.class);
    questionEntries.add(questions);

}

@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onCancelled(DatabaseError databaseError) {

onChildAdded() 方法中,您可以检索 child 的数据。

在数据库中你有 Question-KxOmo9FQ7QZMtq2wUIT,从那里删除 Question 并只保留 id那里,这就像 sql 数据库中的 id 主键,所以你不需要在这里 Question..

所以移除fetchdata()方法。

关于java - 如何使用多个 firebase 项目填充 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46998171/

相关文章:

java - 为什么找不到 installshield Java 包?

java - 数据在数组列表中自动存储多次

node.js - Firebase 存储 : Image file types not showing after upload. 如何使用该镜像?

ios - 崩溃问题 "Device states 100% In Background"

java - 一个float如何与一个Float赋值?

具有静态成员的非静态访问的 Java 8 类型推断

android - 无法将 Android 应用程序从 Eclipse 下载到我的设备

android - 通过检测它是否是 2.1 设备在 1.6 目标应用程序中显示动态壁纸?

android - Firebase 远程配置安全

java - Android 模拟器失败