【问题标题】:How to get value from pushed data in Firebase?如何从 Firebase 中推送的数据中获取价值?
【发布时间】:2021-05-25 12:58:59
【问题描述】:

在我的 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 为空,表示尚未存储值。

【问题讨论】:

    标签: java android


    【解决方案1】:

    尝试在 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);
                                                    }
                                                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多