如何从 Firebase 中推送的数据中获取价值?

2024-02-05

在我的 firebase 中,我存储了问题及其答案。每个答案都有一个 id,它是从 push() 获得的。但我无法显示已回答问题的所有用户的列表。请帮忙。

这是代码:

ListView listView;
ArrayList<String> answerers = new ArrayList<>();
ArrayAdapter arrayAdapter;
String askedBy, question, likes;
FirebaseAuth mAuth;
DatabaseReference databaseReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_answers);

    listView = findViewById(R.id.answersListView);
    Intent intent = getIntent();
    askedBy = intent.getStringExtra("askedBy");
    question = intent.getStringExtra("question");
    likes = intent.getStringExtra("numberOfLikes");
    mAuth = FirebaseAuth.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();

    databaseReference.child("questions").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()){
                for (DataSnapshot dataSnapshot : snapshot.getChildren()){
                    if (dataSnapshot.child("question").getValue().toString().equals(question) && dataSnapshot.child("askedBy").getValue().toString().equals(askedBy)
                            && dataSnapshot.child("likes").getValue().toString().equals(likes)) {
                            dataSnapshot.child("answers").getRef().addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot snapshots) {
                                    if (snapshots.exists()){
                                        for (DataSnapshot dataSnapshots : snapshots.getChildren()){
                                            String id = dataSnapshot.getRef().push().getKey();
                                            answerers.add(dataSnapshots.child(id).child("answeredBy").getValue().toString());
                                        }
                                    }
                                }

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

                                }
                            });
                        arrayAdapter = new ArrayAdapter<>(ViewAnswersActivity.this, android.R.layout.simple_list_item_1, answerers);
                        listView.setAdapter(arrayAdapter);
                    }
                }
            }
        }

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

        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Intent intent1 = new Intent(ViewAnswersActivity.this, AnswerActivity.class);
            intent1.putExtra("askedBy", askedBy);
            intent1.putExtra("answeredBy", answerers.get(i));
            intent1.putExtra("question", question);
            intent1.putExtra("numberOfLikes", likes);
            startActivity(intent1);
        }
    });
}

当我运行应用程序时,listView 为空,表明尚未存储值。


尝试在 onDataChange() 中设置适配器

      @Override
           public void onDataChange(@NonNull DataSnapshot snapshots) {
                if (snapshots.exists()){
                 for (DataSnapshot dataSnapshots : snapshots.getChildren()){
                  String id = dataSnapshot.getRef().push().getKey();                                     
     
 answerers.add(dataSnapshots.child(id).child("answeredBy").getValue().toString());
                                     }
                                    arrayAdapter = new ArrayAdapter<> (ViewAnswersActivity.this, android.R.layout.simple_list_item_1, answerers);
                                    listView.setAdapter(arrayAdapter);
                                                }
                                            }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Firebase 中推送的数据中获取价值? 的相关文章

随机推荐