Невозможно отобразить изображение (только) в RecyclerView, хранящемся в хранилище Firebase.

Я новичок в использовании хранилища Firebase и сталкиваюсь с проблемами отображения изображений в RecyclerView. Я использовал FirebaseRecyclerAdapter для отображения своих данных. Данные и URL-адрес изображения хранятся в базе данных Firebase. Проблема в том, что в RecyclerView не отображается только изображение.

Любая помощь, которую вы можете мне оказать, чтобы заставить это работать, была бы отличной. Спасибо.

Ниже приведен мой код для активности Recycler:

public class DownloadActivity extends AppCompatActivity {

ScaleAnimation shrinkAnim;
private RecyclerView mRecyclerView;
private TextView tvNoImages;
private static final String TAG = "DownloadActivty";


//Getting reference to Firebase Database
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference childref;
private static StorageReference mStorageRef;

//private static final String userId = "53";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.downlad_activtiy_layout);
    childref=database.child("Photos").getRef();

    mStorageRef = FirebaseStorage.getInstance().getReference();
    //Initializing our Recyclerview
    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    tvNoImages = (TextView) findViewById(R.id.tv_no_image);
    //scale animation to shrink floating actionbar
    shrinkAnim = new ScaleAnimation(1.15f, 0f, 1.15f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

    Log.i(TAG, "Set firebase adapter");
    FirebaseRecyclerAdapter<Image_model,ImageViewHolder> adapter = new FirebaseRecyclerAdapter<Image_model, ImageViewHolder>(
            Image_model.class, R.layout.image_item, ImageViewHolder.class,
            //referencing the node where we want the database to store the data from our Object
            database
    )
    {
        @Override
        protected void populateViewHolder(ImageViewHolder viewHolder, Image_model model, int position)
        {
            Log.i(TAG, "Populate Image");
            viewHolder.bindImage(model);
        }
    };

    mRecyclerView.setAdapter(adapter);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager (new LinearLayoutManager(this));

//ViewHolder for Firebase UI
public static class ImageViewHolder extends RecyclerView.ViewHolder{

    TextView tvUserName;
    TextView tvImageName;
    RatingBar ratingBar;
    ImageView ivImage;
    ImageView image;
    View viewHolder;
    Context mContext;

    public ImageViewHolder(View v) {
        super(v);
        viewHolder=v;
        mContext = v.getContext();
        }
    public void bindImage(Image_model model)
    {
        tvUserName=(TextView)viewHolder.findViewById(R.id.user_name);
        tvImageName = (TextView) viewHolder.findViewById(R.id.image_name);
        ratingBar = (RatingBar) viewHolder.findViewById(R.id.like);
        ivImage = (ImageView) viewHolder.findViewById(R.id.img);

        tvUserName.setText(model.getUserName());
        tvImageName.setText(model.getImageName());
        ratingBar.setRating(model.getImageLike());
        Picasso.with(mContext).load(model.getImage()).into(ivImage);
        //Glide.loadImage(model.getImage(),ivImage);

    }
}
}

А это мой модельный класс

public class Image_model {

private String UserName;
private String ImageName;
private String ImageUrl;
private int ImageLike;

public Image_model(){

}
public Image_model(String UserName,String ImageName,String ImageUrl,int ImageLike){
    this.UserName=UserName;
    this.ImageName = ImageName;
    this.ImageUrl = ImageUrl;
    this.ImageLike  = ImageLike;
}

public String getUserName() {
    return UserName;
}

public void setUserName(String UserName) {
    this.UserName = UserName;
}

public String getImageName() {
    return ImageName;
}

public void setImageName(String ImageName) {
    this.ImageName = ImageName;
}

public String getImage() {
    return ImageUrl;
}

public void setImage(String ImageUrl) {
    this.ImageUrl = ImageUrl;
}

public int getImageLike() {
    return ImageLike;
}

public void setImageLike(int ImageLike) {
    this.ImageLike = ImageLike;
}
}

person Harsh vardhan Bhatnagar    schedule 27.12.2016    source источник
comment
Что показывают ваши журналы? Есть ли причина, по которой вы не используете Glide, превосходную библиотеку для загрузки изображений?   -  person Doug Stevenson    schedule 28.12.2016
comment
Вот копия моего лога: Пропущено 38 кадров! Приложение может выполнять слишком много работы в своем основном потоке. Не найден установщик/поле для ImageUrl в классе hb.iart.Image_model Не найден установщик/поле для -KZQ17zHCGfv04PH2GBJ в классе hb.iart.Image_model Не найден установщик/поле для ImageLikes в классе hb.iart.Image_model Нет установщик/поле для -KZPyuaaHsIRyLMrYboX найдено в классе hb.iart.Image_model Заполнить изображение   -  person Harsh vardhan Bhatnagar    schedule 29.12.2016
comment
Я тоже пытался скользить, но столкнулся с проблемой. @DougStevenson   -  person Harsh vardhan Bhatnagar    schedule 29.12.2016


Ответы (1)


Я не знаю, что ты делаешь внутри своего bindImageметода. Но помните, что вы получаете imageURL от своей модели, а не от самого изображения. Я рекомендую вам использовать библиотеку Glide, чтобы установить изображение с URL на и imageView. Кроме того, помните, что в консоли Firebase вы должны использовать «URL-адрес загрузки», а не ссылку на хранилище. что-то типа

https://firebasestorage.googleapis.com/v0/b/yourAwesomeDatabase... .

Я использую Glide для установки изображений из Firebase в своем приложении, и я использую этот метод:

  /**
    * Load an image with default values and default placeholder.
    * @param url photo Url.
    * @param imageView target view to load the desired image.
    */
   public static void loadImage(String url, ImageView imageView) {
      Context context = imageView.getContext();
      ColorDrawable cd = new ColorDrawable(ContextCompat.getColor(context, R.color.app_grey));
      Glide.with(context)
         .load(url)
         .placeholder(cd)
         .crossFade()
         .centerCrop()
         .into(imageView);
   }
person Francisco Durdin Garcia    schedule 27.12.2016
comment
Я отредактировал свой пост и добавил код для метода bindImage(). И я использую Picasso для загрузки изображений в режиме повторного использования. @Франсиско Дурдин Гарсия - person Harsh vardhan Bhatnagar; 27.12.2016