Search code examples
androidandroid-studiofirebase-realtime-databasepicassoandroid-glide

image are not getting loaded using firebaseRecyclerAdapter


everything is working fine but images are not getting loaded

this image from emulator

this image display the value log of image-getimgUrl

this image frome firebase database

the problem her is the value of image and getimgUrl = NULL

public class MainScreen extends AppCompatActivity {

RecyclerView recyclerView;
DatabaseReference mRef;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_screen);


    recyclerView = (RecyclerView)findViewById(R.id.recyclerView_main);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getBaseContext()));


    mRef = FirebaseDatabase.getInstance().getReference("Data");

    FirebaseRecyclerAdapter<Model,mViewHolder> adapter =
            new FirebaseRecyclerAdapter<Model, mViewHolder>(Model.class,R.layout.row,mViewHolder.class,mRef) {
        @Override
        protected void populateViewHolder(mViewHolder viewHolder, Model model, int position) {

            viewHolder.setTitle(model.getTitle());
            viewHolder.setImage(getBaseContext(),model.getImgUrl());

            Log.e("getImgUrl", "value : "+model.getImgUrl());
            Log.e("getTitle", "value : "+model.getTitle());
        }
    };

    recyclerView.setAdapter(adapter);
}


public static class mViewHolder extends RecyclerView.ViewHolder{
    View mview;

    public mViewHolder(View itemView) {
        super(itemView);


        mview = itemView;

    }


    public void setTitle(String title){

        TextView postTitle = (TextView) mview.findViewById(R.id.text_row);
        postTitle.setText(title);

        Log.e("title", "value : "+title);
        }
    public void setImage(Context ctx,String image){

        ImageView postImage = (ImageView) mview.findViewById(R.id.image_row);

        Picasso.with(ctx).load(image).into(postImage);

        Log.e("image", "value : "+image);
    }
}

}


Solution

  • Your model is wrong. Try this:

    public final class Model {
        // Excluding these fields because proguard can make them public
        @Exclude private String mTitle;
        @Exclude private String mImage;
    
        public Model() {
            // Needed for Firebase
        }
    
        @Keep
        public String getTitle() {
            return mTitle;
        }
    
        @Keep
        public void setTitle(String title) {
            mTitle = title;
        }
    
        @Keep
        public String getImage() {
            return mImage;
        }
    
        // The "image" part of `setImage` needs to match what it's called in your database.
        // Or you could use `@PropertyName("nameInTheDatabase")`
        @Keep
        public void setImage(String image) {
            mImage = image;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            Model model = (Model) o;
    
            return (mTitle == null ? model.mTitle == null : mTitle.equals(model.mTitle))
                    && (mImage == null ? model.mImage == null : mImage.equals(model.mImage));
        }
    
        @Override
        public int hashCode() {
            int result = mTitle == null ? 0 : mTitle.hashCode();
            result = 31 * result + (mImage == null ? 0 : mImage.hashCode());
            return result;
        }
    
        @Override
        public String toString() {
            return "Model{" +
                    "mTitle='" + mTitle + '\'' +
                    ", mImage='" + mImage + '\'' +
                    '}';
        }
    }