gpt4 book ai didi

android - 如何在 GridView 中显示 Firebase 存储图像

转载 作者:行者123 更新时间:2023-12-05 00:08:35 26 4
gpt4 key购买 nike

我是 Android 新手,我正在学习 gridview。我想将可绘制对象中的图像列表显示到 gridview 中,但我不知道如何在 gridview 中显示来自 Firebase 存储的图像。

我看了很多教程,也尝试了很多 Stackoverflow 答案,但我无法得到我需要的东西

我在 Firebase 存储中创建了一个新文件夹,并在那里上传了 6 张图片,我想在 gridview 中显示所有这 6 张图片。

这是我如何显示可绘制图像的代码,我不知道如何加载该 url 并且在滑行中我完全感到困惑和困惑

public class NewListCreate extends BottomSheetDialogFragment {


int[] images = {R.drawable.menu, R.drawable.musicbox, R.drawable.shoppingbag, R.drawable.shoppingcart, R.drawable.wallet, R.drawable.weddingdress};
int imageRes = images[0];



public NewListCreate() {
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.new_list_create, container, false);

ImageButton done = view.findViewById(R.id.done);
final EditText listname = (EditText) view.findViewById(R.id.listname);
final GridView gridView = (GridView) view.findViewById(R.id.gridview);

final CustomAdpter customAdpter = new CustomAdpter(images, getContext());
gridView.setAdapter(customAdpter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
customAdpter.selectedImage = i;
customAdpter.notifyDataSetChanged();
imageRes = images[i];


}
});




done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {


String itemname = listname.getText().toString();
if (!TextUtils.isEmpty(listname.getText().toString())) {

startActivity(new Intent(getContext(), CheckslateHome.class).putExtra("data", itemname).putExtra("image", imageRes));
dismiss();
} else {
Toast.makeText(getContext(), "List Name not Empty ", Toast.LENGTH_SHORT).show();
}

}

});


return view;


}


public class CustomAdpter extends BaseAdapter {

public int selectedImage = 0;
private int[] icons;
private Context context;
private LayoutInflater layoutInflater;

public CustomAdpter(int[] icons, Context context) {
this.icons = icons;
this.context = context;
this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return icons.length;
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

if (view == null) {
view = layoutInflater.inflate(R.layout.image_list, viewGroup, false);

}
StorageReference storageReference = FirebaseStorage.getInstance().getReference();
ImageView imageicons = view.findViewById(R.id.image);

if (i < icons.length) {

imageicons.setImageResource(icons[i]);

if (i != selectedImage) {
imageicons.setImageAlpha(50);
}
imageicons.setScaleType(ImageView.ScaleType.CENTER_CROP);
// imageicons.setLayoutParams(new GridView.LayoutParams(150, 150));
if (i == selectedImage) {

view.setBackgroundColor(Color.WHITE);
} else {
view.setBackgroundColor(Color.TRANSPARENT);
}
}
;


return view;
}
}
}

这里是firebase存储信息

enter image description here

最佳答案

我使用以下代码在我的应用程序中做了一个小而快速的演示,结果是这个 enter image description here

对于 gridAdappter 我有这个:

public class GridAdapter extends BaseAdapter {
Context context;
private final String[] values;
private final String[] images;
View view;
LayoutInflater layoutInflater;

public GridAdapter(Context context, String[] values, String[] images) {
this.context = context;
this.values = values;
this.images = images;
}

@Override
public int getCount() {
return values.length;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView==null)
{
view = new View(context);
view=layoutInflater.inflate(R.layout.single_item,null);
ImageView imageView = view.findViewById(R.id.imageView);
TextView textView = view.findViewById(R.id.textView);
Glide.with(context).load(images[position]).into(imageView);
textView.setText(values[position]);
}
return view;
}

对于我有 GridView 的 Activity ,我这样做了:

  gridView = findViewById(R.id.gridView) ;

databaseReference = FirebaseDatabase.getInstance().getReference().child("Posts");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot:snapshot.getChildren())
{
if(i<19)
{
Post post = dataSnapshot.getValue(Post.class);
images[i]=post.getpImage();
values[i]=post.getpTitle();
i++;
}
}
GridAdapter gridAdapter = new GridAdapter(getApplicationContext(),values,images);
gridView.setAdapter(gridAdapter);
}

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

}
});

我有一个对我的 Firebase 数据库的引用,以获取我存储在 Firebase 存储中的图片的 URL,我使用类 Post 来获取信息,因为这对我来说更容易、更快捷.

您需要获取图像的 URL 并将它们添加到字符串数组 images 中,如果您没有设置存储图片 URL 的数据库,请检查 this文档以查看如何从您的存储中获取 URL。

这是您如何从 Firebase 存储中获取您的其中一张照片的 URL

storageReference.child("icons/menu").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
images[0] = String.valueOf(uri);
values[0] = "menu"
//Here you can also add thiss
/*GridAdapter gridAdapter = new
GridAdapter(getApplicationContext(),values,images);
gridView.setAdapter(gridAdapter);*/

}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {

}
});

关于android - 如何在 GridView 中显示 Firebase 存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63490176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com