【问题标题】:Firebase Value Event ListenerFirebase 值事件监听器
【发布时间】:2017-03-24 16:06:54
【问题描述】:

我想从 Firebase 数据库中读取值并显示在 ListView 中。但是出了点问题。它没有给出正确的值。这是代码:

Java

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference reference = database.getReference("Stats").child(ders);

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            stats.put(dataSnapshot.getKey(), dataSnapshot.getValue().toString());
            StatsAdapter adapter = new StatsAdapter(stats);
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            startActivity(new Intent(StatsActivity.this, DerslerListActivity.class));
        }
    });

JSON

"Stats" : {
"Matematik" : {
  "ahmetozrahat25" : "50",
  "nihatkeklik" : 50
},
"Türkçe" : {
  "abdullah" : 98,
  "ahmetozrahat25" : "0",
  "banuozrht" : 95,
  "nihatkeklik" : 60
}
}

结果是Matematik, {ahmetozrahat=50, nihatkeklik=50},但我想要:ahmetozrahat25: 50, nihatkeklik: 50。我该怎么办?

【问题讨论】:

  • 提供您的数据库的 sn-p。
  • 我在 JSON 部分提供。你想要我所有的数据库?

标签: android firebase firebase-realtime-database


【解决方案1】:

Egek92's answer 是对的。而且我想我知道为什么它不提供您想要的数据。也许使用以下代码,您将:

DatabaseReference reference = database.getReference("Stats").child("Matematik");
reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // dataSnapshot value will be Matematik, {ahmetozrahat=50, nihatkeklik=50}
        // because it is indeed the value we need

        // But you want key value pair to be added to your stats
        // So we can just loop through the values

        for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
            stats.put(childSnapshot.getKey(), childSnapshot.getValue().toString());
        }
        StatsAdapter adapter = new StatsAdapter(stats);
        listView.setAdapter(adapter);
    }
    ...
}

希望对你有帮助

【讨论】:

  • 你节省了我的时间!我忘记了for循环。谢谢!
【解决方案2】:

试试:

DatabaseReference reference = database.getReference("Stats").child("Matematik");

【讨论】:

  • 是一样的:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多