Comment afficher des images de stockage Firebase dans GridView

Aug 19 2020

Je suis nouveau sur Android, j'apprends gridview..i Afficher une liste d'images de drawable à gridview mais je ne sais pas comment afficher des images de Firebase Storage dans gridview

J'ai vu de nombreux tutoriels et j'ai essayé beaucoup de réponses Stackoverflow mais je ne peux pas obtenir ce dont j'ai besoin

J'ai créé un nouveau dossier dans Firebase Storage et j'y télécharge 6 images et je veux afficher toutes les 6 images dans gridview

Voici mon code de la façon dont j'affiche des images à partir de drawable et je ne sais pas comment charger cette URL et en glissement j'étais totalement confus et me suis dérangé

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;
        }
    }
}

voici les informations de stockage Firebase

Réponses

HemmaRoyD Dec 20 2020 at 05:07

J'ai créé une classe FirebaseUtils , à partir de laquelle j'ai une gamme de méthodes Firebase statiques que je peux choisir (sans jeu de mots).
Afin d'obtenir ce que vous voulez, créez simplement une boucle puis appelez la méthode downloadPic ci-dessous

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

ivPic est la vue de l'image
picToDisplay est la photo téléchargée depuis le stockage
storageFolder est le dossier sur Firebase par exemple: Photos /
picToDownload est le nom de la photo dans le storageFolder
noOfPhotos est le nombre de photos que vous avez, évidemment vous pouvez configurer une requête et charger les dans un ArrayListpour plus de commodité

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

    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, "" );
            }
        } );
    }