在Firebase数据库中获取字符串值的正确方法是什么

时间:2018-08-10 16:48:30

标签: java android firebase firebase-realtime-database

美好的一天!

我在显示图像时遇到问题。

这是代码段:

final ArrayList<String> imgURLs = new ArrayList<>();

    String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = firebaseDatabase.getReference(userUid).child("WARDROBE");
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                imgURLs.add(snapshot.getValue().toString());
                Toast.makeText(Profile.this, (String)snapshot.getValue(), Toast.LENGTH_SHORT).show();
            }
        }

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

        }
    });

    imgURLs.add("https://assets.academy.com/mgen/58/20083458.jpg?is=500,500");
    imgURLs.add("https://assets.academy.com/mgen/61/20057861.jpg?is=500,500");
    imgURLs.add("https://assets.academy.com/mgen/65/20082765.jpg?is=500,500");
    imgURLs.add("https://ir0.mobify.com/project-burlington/1082/1922/https://cdn.burlingtoncoatfactory.com/FileLibrary/f4ee340d60f0421a8020b8ae05e6f36e/7854_SquareThumbnail.jpeg");
    imgURLs.add("https://qph.fs.quoracdn.net/main-qimg-5d9f95691aca6affb53dcae7fbeba61f-c");
    imgURLs.add("https://images.mattel.com/scene7//wcsstore/MattelCAS/05BUN14_Comfy_Space_PJs_and_Slippers_Girls_FMD28_FMD29_1?$ossmallindex$&storeId=10651&SKU=05BUN14");

我的问题出在onDataChange上。我的目标是显示保存在Firebase存储中的图像,但首先,我创建了一个带有子“图像”的Firebase数据库。它必须是所有https://的列表。

我首先创建了一个示例。我创建了带有子图像的样本。其中是我在Java代码中手动添加的网址-我是通过互联网获得的。在Toast视图中,显示的字符串与我在Java代码中手动添加的网址相同。问题在于它不显示Firebase中URL的图像,而仅显示手动添加的Java URL。

这是怎么发生的?

1 个答案:

答案 0 :(得分:2)

好的,我有一个错误。

该解决方案依赖于onDataChange。因此,在活动打开之后,代码从上到下运行,并且假设执行了databaseReference,并且onDataChange仍然需要时间才能生效,直到发生更改为止。

因此,在我的代码的最底部,有setUpImageView()方法,它是在onDataChange完成之前首先执行的。结果,它不显示所需的图像:D