【问题标题】:how to populate listview with multiple firebase items如何使用多个 Firebase 项目填充列表视图
【发布时间】:2017-10-29 08:19:07
【问题描述】:

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

Firebase 助手

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;
}

这是显示列表的我的活动

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;        }
}

【问题讨论】:

    标签: java android firebase listview firebase-realtime-database


    【解决方案1】:

    你可以这样做:

    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() 方法中,您可以检索孩子的数据。

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

    所以删除fetchdata() 方法。

    【讨论】:

    • 要不要再把setText函数放一遍?
    • @user8773560 什么setText,如果它是列表视图,则不要使用 setText .. 我也更新了答案,现在应该可以使用
    • 我做到了,但它不起作用。结果还是一样(我只得到一个元素)
    • 是的,我做到了。我在那里更新了数据库结构图像link
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 2017-08-10
    • 2012-07-14
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多