Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Firebase存储中获取随机图像_Java_Android_Firebase_Firebase Realtime Database_Firebase Storage - Fatal编程技术网

Java 从Firebase存储中获取随机图像

Java 从Firebase存储中获取随机图像,java,android,firebase,firebase-realtime-database,firebase-storage,Java,Android,Firebase,Firebase Realtime Database,Firebase Storage,我正在为一个学校项目制作一个应用程序,它基本上是一个旅游助手。用户可以在主页上看到随机的国家卡片,这样他就可以点击并获得更多关于那个国家的信息 所有我的国家/地区卡图像都存储在名为“countryCardImages”的目录下的Firebase存储中。所有图像都有它们所代表的国家的名称,因此我无法使用getName(元数据函数)检索该名称。 问题是,如果我将所有照片从1重命名为n,我可以简单地生成一个随机数并将其连接到链接,这样每次我打开MainActivity时,它都会生成不同的数字并显示不同

我正在为一个学校项目制作一个应用程序,它基本上是一个旅游助手。用户可以在主页上看到随机的国家卡片,这样他就可以点击并获得更多关于那个国家的信息

所有我的国家/地区卡图像都存储在名为“countryCardImages”的目录下的
Firebase存储中。所有图像都有它们所代表的国家的名称,因此我无法使用
getName
(元数据函数)检索该名称。 问题是,如果我将所有照片从1重命名为n,我可以简单地生成一个随机数并将其连接到链接,这样每次我打开MainActivity时,它都会生成不同的数字并显示不同的图像。这个方法的问题是,我无法检索国家名称,因为没有保存该值的地方。所以,我唯一的选择就是用他们的国家名称来命名这些图像。有没有其他方法可以用这种“方法”显示随机图像

数据库结构:
是的。您可以将所有图像URL存储在Firebase实时数据库中,当您想要检索特定数量的随机图像时,请使用我的回答

假设您的Firebase数据库如下所示:

Firebase-root
   |
   --- imageUrls
          |
          --- HollandImageUrl: true
          |
          --- SpainImageUrl: true
          |
          --- FranceImageUrl: true
          |
          --- //Other Countries
要获取5个随机URL,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference imageUrlsRef = rootRef.child("imageUrls");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> urlList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String url = ds.getKey();
            urlList.add(url);
        }

        int urlCount = urlList.size();
        int randomNumber = new Random().nextInt(urlCount);
        List<String> randomUrlList = new ArrayList<>();
        for (int i=1; i<=5; i++) {
            randomUrlList.add(urlList.get(randomNumber));
            //Set image to ImageView
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
imageUrlsRef.addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference countriesRef = rootRef.child("countries");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> urlList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String url = ds.child("Image").getValue(String.class);
            urlList.add(url);
        }

        int urlCount = urlList.size();
        int randomNumber = new Random().nextInt(urlCount);
        List<String> randomUrlList = new ArrayList<>();
        for (int i=1; i<=5; i++) {
            randomUrlList.add(urlList.get(randomNumber));
            //Set image to ImageView
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
countriesRef .addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
DatabaseReference imageUrlsRef=rootRef.child(“imageUrls”);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
List urlist=new ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
字符串url=ds.getKey();
添加(url);
}
int urlCount=urlist.size();
int randomNumber=new Random().nextInt(urlCount);
List randomUrlList=新建ArrayList();

对于(int i=1;i是的。您可以将所有图像URL存储在Firebase实时数据库中,当您想要检索特定数量的随机图像时,请使用我的回答

假设您的Firebase数据库如下所示:

Firebase-root
   |
   --- imageUrls
          |
          --- HollandImageUrl: true
          |
          --- SpainImageUrl: true
          |
          --- FranceImageUrl: true
          |
          --- //Other Countries
要获取5个随机URL,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference imageUrlsRef = rootRef.child("imageUrls");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> urlList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String url = ds.getKey();
            urlList.add(url);
        }

        int urlCount = urlList.size();
        int randomNumber = new Random().nextInt(urlCount);
        List<String> randomUrlList = new ArrayList<>();
        for (int i=1; i<=5; i++) {
            randomUrlList.add(urlList.get(randomNumber));
            //Set image to ImageView
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
imageUrlsRef.addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference countriesRef = rootRef.child("countries");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> urlList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String url = ds.child("Image").getValue(String.class);
            urlList.add(url);
        }

        int urlCount = urlList.size();
        int randomNumber = new Random().nextInt(urlCount);
        List<String> randomUrlList = new ArrayList<>();
        for (int i=1; i<=5; i++) {
            randomUrlList.add(urlList.get(randomNumber));
            //Set image to ImageView
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
countriesRef .addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
DatabaseReference imageUrlsRef=rootRef.child(“imageUrls”);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
List urlist=new ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
字符串url=ds.getKey();
添加(url);
}
int urlCount=urlist.size();
int randomNumber=new Random().nextInt(urlCount);
List randomUrlList=新建ArrayList();

对于(int i=1;iSo,使用您提供的代码,我将能够检索5个图像并在ImageView中显示它们?谢谢,@AlexMamo!我对这些NoSQL数据库没有经验。这种数据库格式好吗?[/link]是的,请查看我根据您的数据库结构更新的答案。谢谢,您帮了我很多:)将图像插入到我的imageview中类似于毕加索.with(getContext()).load(_whatDoIPutHere)。插入(imgCard3)
?毕加索图书馆也不错,但我推荐你:。因此,使用你提供的代码,我将能够检索5幅图像并在ImageView中显示它们?谢谢,@AlexMamo!我对这些NoSQL数据库没有经验。这种数据库格式好吗?[/link]是的,请查看我根据您的数据库结构更新的答案。谢谢,您帮了我很多忙:)将图像插入我的imageview将类似于
Picasso.with(getContext()).load(_whatDoIPutHere)。加载到(imgCard3)
?Picasso库也很好,但我建议您:。