Iván
Iván

Reputation: 111

Not showing the image in RecyclerView

i'm starting in Android programming. I have a problem since a few days and i want ask you if you can help me. I want to show a recyclerView with different layouts ,text and image. I have this code ,the first type ,text is working ,but the image not appears.

Thanks.

    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Historias object = mList.get(position);
    if (object != null) {
        switch (object.getTipoHistoria()) {
            case tipo_texto:
                ((CityViewHolder) holder).mTitle.setText(object.getTexto());
                break;
            case tipo_imagen:

                StorageReference storageRef = storage.getReferenceFromUrl("gs://xx.appspot.com/imagenes/un-gato-bebe-433.jpg");

                storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        new RetrieveFeedTask().execute(uri.toString());

                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle any errors
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        ((EventViewHolder) holder).mImage.setImageBitmap(feed);
                    }
                });

                break;
        }
    }
}

Upvotes: 1

Views: 1197

Answers (2)

Manohar
Manohar

Reputation: 23384

Just remove switch case, as you know when user enters switch statement only 1 case will be executed, so only your set text was getting executed not the image one

 public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Historias object = mList.get(position);

                 holder.mTitle.setText(object.getTexto());


                StorageReference storageRef = storage.getReferenceFromUrl("gs://xx.appspot.com/imagenes/un-gato-bebe-433.jpg");

                storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        new RetrieveFeedTask().execute(uri.toString());

                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle any errors
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        holder.mImage.setImageBitmap(feed);
                    }
                });


        }
    }
}

and i would suggest you to use picasso or glide library to load images ,its super easy to load images

Edit.

just use holder . instead of ((EventViewHolder) holder)

Upvotes: 1

Andrey Alimov
Andrey Alimov

Reputation: 71

I recommend use special lib for downloading photos from web or sd. Here some:


Picasso

Picasso.with(context).load("path_to_image").into(imageView);

Glide

Glide.with(this).load("path_to_image").into(imageView);

Upvotes: 2

Related Questions