Firebase 信息显示在 ListView 的一个列表项中

Firebase information are showing in one list item of the ListView

这是我的代码,它在列表视图的一项中显示了从应用程序连接到的 Fire-base 返回的所有信息。

有人可以帮忙编写代码吗?

public class usernews extends AppCompatActivity {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference myRef = database.getReference("allNews");
    private ListView lsStudents;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_usernews);
        lsStudents=(ListView) findViewById(R.id.list);
        ...
    }
    ...
}

我认为这里有错误,但我找不到它

myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // This method is called once with the initial value and again
        // whenever data at this location is updated.

        final List<String> areas = new ArrayList<String>();
        for (DataSnapshot areaSnapshot: dataSnapshot.getChildren()) {
            String value1 = String.valueOf(dataSnapshot.getValue());
            areas.add(value1);
        }

        String value2 = String.valueOf(dataSnapshot.getValue());
        Log.d("allNews", "Value is: " + value2);

        ArrayAdapter<String> areasAdapter = new ArrayAdapter<String>(usernews.this,android.R.layout.simple_expandable_list_item_1, areas);
        lsStudents.setAdapter(areasAdapter);
    }
});

Firebase 数据的屏幕截图。 Link

引用正确节点后的屏幕截图Link

改变你的DataBaseReference.

使用这个

final DatabaseReference myRef = database.getReference("allNews").child("allNews");

而不是

final DatabaseReference myRef = database.getReference("allNews");

您的实际数据在 "allNews" 标签内。最终它的子节点也有相同的名称。

然后更新你的 for 循环。您从错误的引用中获取数据。

final List<String> areas = new ArrayList<String>();
for (DataSnapshot areaSnapshot: dataSnapshot.getChildren()) {
    // Get value from areaSnapShot not from dataSnapshot
    String value1 = String.valueOf(areaSnapshot.getValue());
    areas.add(value1);
}