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

Android 如何在GridView中显示Firebase存储图像,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我是Android新手,我正在学习gridview。我想将drawables中的图像列表显示到gridview中,但我不知道如何在gridview中显示Firebase存储中的图像 我看过很多教程,也尝试过很多Stackoverflow的答案,但我无法得到我需要的 我在Firebase存储中创建了一个新文件夹,在那里上传了6幅图像,我想在gridview中显示所有6幅图像 这是我的代码,我如何显示来自drawable的图像,我不知道如何加载该url,在glide中,我自己完全被搞糊涂了 publ

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

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

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

这是我的代码,我如何显示来自drawable的图像,我不知道如何加载该url,在glide中,我自己完全被搞糊涂了

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;
        }
    }
}
公共类NewListCreate扩展了DialogFragment{
int[]images={R.drawable.menu,R.drawable.musicbox,R.drawable.shoppingbag,R.drawable.shoppingcart,R.drawable.wallet,R.drawable.weddingdress};
int imageRes=图像[0];
公共NewListCreate(){
}
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.new\u list\u create,container,false);
ImageButton done=view.findViewById(R.id.done);
final EditText listname=(EditText)view.findViewById(R.id.listname);
final GridView GridView=(GridView)view.findviewbyd(R.id.GridView);
final CustomAdpter CustomAdpter=new CustomAdpter(图像,getContext());
setAdapter(customAdpter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
customAdpter.selectedImage=i;
customAdpter.notifyDataSetChanged();
imageRes=图像[i];
}
});
done.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
String itemname=listname.getText().toString();
如果(!TextUtils.isEmpty(listname.getText().toString())){
startActivity(新意图(getContext(),CheckslateHome.class).putExtra(“数据”,itemname).putExtra(“图像”,imageRes));
解雇();
}否则{
Toast.makeText(getContext(),“列表名不为空”,Toast.LENGTH_SHORT.show();
}
}
});
返回视图;
}
公共类CustomAdpter扩展BaseAdapter{
public int selectedImage=0;
私有int[]图标;
私人语境;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
公共CustomAdpter(int[]图标,上下文){
这个图标=图标;
this.context=上下文;
this.layoutInflater=(layoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
返回图标长度;
}
@凌驾
公共对象getItem(int i){
返回null;
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
如果(视图==null){
视图=布局更平坦。充气(R.layout.image\u列表,视图组,false);
}
StorageReference-StorageReference=FirebaseStorage.getInstance().getReference();
ImageView imageicons=view.findViewById(R.id.image);
如果(i
这是firebase存储信息


我用下面的代码在我的应用程序中做了一个小而快速的演示,结果如下

对于Gridappter,我有以下内容:

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
的活动,我已经做了以下工作:

  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) {

       }
   });
我创建了一个FirebaseUtils类,从中我可以选择一系列静态firebase方法(没有双关语)。
为了实现您想要的,只需创建一个循环,然后调用下面的downloadPic方法

    for( int index = 0; index < noOfPhotos; index++ )
        FirebaseUtils.downloadPic( ivPic[index], "Photos/", image[index] );

您是否更改了firebase中的身份验证规则?是的,我改变了规则读写真实我不知道如何在项目中添加firebase和工具,我看了很多教程,但我被完全弄糊涂了,还有很多教程,但是android没有你读过关于firebase的文档,firebase有一个很棒的文档。我可以与recycler view共享firebase的链接。要从firebase Bro而不是从Drawable显示的图像您是否将图像存储在firebase的“Posts”文件夹中?Post类里面是什么?Posts不是文件夹而是firebase数据库的路径,我在其中存储了URL和其他信息,Post类不管它有什么,我使用它从数据库中获取信息。如果您没有firebase数据库和图片的URL,则必须从firebase存储中获取URL,如文档所示,通常,当您将照片上载到firebase存储时,您会保存URL并将其添加到数据库中,以便稍后访问。所以我想传递firebase的链接,对吗?对不起,我是全新的,检查这个,而不是
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) {

        }
    });
    for( int index = 0; index < noOfPhotos; index++ )
        FirebaseUtils.downloadPic( ivPic[index], "Photos/", image[index] );
    //////////////////////////////////////////////////////////////////////////////////

    private static void loadPicIntoGlide( @NonNull ImageView ivPic, 
                                          @NonNull String picToDisplay )
    {
        if( picToDisplay.isEmpty() )
        {
            Glide.with( ivPic.getContext() )
                    .load( R.mipmap.ic_default_pic )
                    .into( ivPic );
        }
        else
        {
            Glide.with( ivPic.getContext() )
                    .load( picToDisplay )
                    .into( ivPic );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////


    public static void downloadPic( @NonNull ImageView ivPicView,
                                    @NonNull String storageFolder,
                                    @NonNull String picToDownload )
    {
        StorageReference storageRef = FirebaseStorage.getInstance().getReference();
        Uri uri = Uri.fromFile( new File( picToDownload ) );
        StorageReference storageReference = storageRef.child( 
               storageFolder + picToDownload );

        storageReference.getDownloadUrl().addOnSuccessListener( 
                                                new OnSuccessListener<Uri>()
        {
            @Override
            public void onSuccess( Uri uri )
            {
                String actPic = uri.toString();
                loadPicIntoGlide( ivPicView, actPic );
            }
        } )
        .addOnFailureListener( new OnFailureListener()
        {
            @Override
            public void onFailure( @NonNull Exception e )
            {
                loadPicIntoGlide( ivPicView, "" );
            }
        } );
    }