显示Firebase数据库(Android)中的数据

显示Firebase数据库(Android)中的数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,这是我的Firebase数据库的外观示例 我想做的是访问pic1、pic2等内部的内容,但我得到一个错误,它根本没有显示任何数据 下面是我的代码的样子: private void getData(){ firebaseDatabaseInstance = FirebaseDatabase.getInstance(); // get reference to 'users' node booksInstance = firebaseDataba

这是我的Firebase数据库的外观示例

我想做的是访问pic1、pic2等内部的内容,但我得到一个错误,它根本没有显示任何数据

下面是我的代码的样子:

 private void getData(){
        firebaseDatabaseInstance = FirebaseDatabase.getInstance();

        // get reference to 'users' node
        booksInstance = firebaseDatabaseInstance.getReference("mainAlbum");

        booksInstance.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                setData(dataSnapshot);
            }


            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                Log.w(TAG, "Failed to read value.", error.toException());
            }
        });

    }

    List<List<String>> booksInfo;
    List<String> temp;
    private void setData(DataSnapshot dataSnapshot){
        booksInfo = new ArrayList<>();

        for (DataSnapshot alert: dataSnapshot.getChildren()) {
            n = n + 1;
            while(alert.child("pic"+n).exists());
            temp = new ArrayList<>();
            Log.d("image_name", (String) alert.child("image_name").getValue());
            Log.d("id", (String) alert.child("id").getValue());
            Log.d("image_path", (String) alert.child("image_path").getValue());
            temp.add((String) alert.child("image_name").getValue());
            temp.add((String) alert.child("id").getValue());
            temp.add((String) alert.child("image_path").getValue());
            booksInfo.add(temp);
        }

        if(booksInfo.size() > 0){
            setGridView();
        }else{
            Toast.makeText(this, "No data Found.", Toast.LENGTH_SHORT).show();
        }
    }

相册1、2等中的数据将显示,但我想做的是显示图片中的数据。有人知道我做错了什么吗?

如果我做对了,你就可以在“Pic”元素之外找到图像名称,对吗?因此,这意味着警报对象不是“PicX”,而是ALbumX。你为什么不先做一个小动作(“picX”),然后再提醒一下。孩子。。。我的意思是,你的代码很好,但是你的代码比你需要的要高。一种测试方法是重命名外部元素(不是“pic”节点下的这些元素)“out\u image\u name”等,您应该会得到一个错误。@gvlachakis是的,我在“pic”之外得到了图像名称。我知道当我试图得到我想要的节点时,我会把childnodes拉高1级,我没有得到任何数据。我试图将此行更改为booksInstance=firebaseDatabaseInstance.getReference(“Album”+n);但是我仍然没有得到任何数据,因为您已经将引用设置为mainAlbum,您将得到嵌套到它的所有数据。在dataChange上调用setData,我猜每次都会重置n变量,对吗?或者它被多次调用会导致任何问题吗?如果我是你,我会再写一次这个部分。是的,我把setData叫做dataChange。我试着删除n,改为放1,只是为了获得数据库中的第一张图片,但它仍然没有显示数据。所以我想这不是问题,对吗?请按照本教程进行操作
while(alert.child("pic"+n).exists());