我正在为一个基本上是旅行助手的学校项目制作应用程序。用户可以在主页上看到随机国家/地区卡片,这样他就可以点击并获取有关该国家/地区的更多信息。
我的所有国家/地区卡片图片都存储在名为" countryCardImages "的目录中的Firebase Storage
中。所有图像都具有它们所代表的国家/地区的名称,因此我无法使用getName
(元数据功能)检索该名称。
问题是,如果我将所有照片从1重命名为n,我可以简单地生成一个随机数并将其连接到链接,因此每次打开MainActivity时,它都会生成不同的数字并显示不同的图像。这种方法的问题是,我无法检索国家/地区名称,因为没有地方可以保存该值。所以,我唯一的选择是用他们的国家名称命名图像。是否有另一种方法可以使用这种方法显示随机图像?
答案 0 :(得分:1)
是的。您可以将所有图片网址存储在Firebase实时数据库中,当您想要检索特定数量的随机图片时,请使用此 post 中的答案。
假设您有一个Firebase数据库,如下所示:
Firebase-root
|
--- imageUrls
|
--- HollandImageUrl: true
|
--- SpainImageUrl: true
|
--- FranceImageUrl: true
|
--- //Other Countries
要获得5个随机网址,请使用以下代码:
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);