Search code examples
androidhttpsfirebase-realtime-databasepicasso

Image doesn't loads on recyclerview from firebase database using picasso


I have been trying to create a wallpaper app I have this activity with a recycler view. I want to load images from my firebase firestore database.I have managed to do that. I am getting the right image url as I checked it using LOG.I tried to convert the image link to images using PICASSO.But unfortunately, the images don't loads on the recyclerview. please Help This is my Adapter and Holder class

package com.example.rimapps.charpapers;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Protocol;
import com.squareup.picasso.OkHttpDownloader;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by Rimshad on 28/11/2017.
 */

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder>{

    List<String> Mylist2= new ArrayList<>();
    Context context;

    public ImageAdapter(List<String>Mylist2,Context context) {
        this.Mylist2 = Mylist2;
        this.context = context;
    }

    @Override
    public ImageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.items2, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ImageAdapter.ViewHolder holder, final int position) {
        OkHttpClient client = new OkHttpClient();
        client.setProtocols(Arrays.asList(Protocol.HTTP_1_1));
        Picasso picasso = new Picasso.Builder(context)
                .downloader(new OkHttpDownloader(client))
                .build();

       picasso.with(context)
                .load(Mylist2.get(position))
                .placeholder(R.drawable.superman)
                .error(R.drawable.error)
                .into(holder.image2);

        holder.image2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,Mylist2.get(position),Toast.LENGTH_SHORT).show();
            }
        });
    }
    @Override
    public int getItemCount() {
        return Mylist2.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {


                public ImageView image2;

                ViewHolder(View view) {

                    super(view);

                    image2 = (ImageView) view.findViewById(R.id.wallid);
                }
            }
        }

This is my MainActivity class

package com.example.rimapps.charpapers;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;

import java.util.ArrayList;

public class Main2Activity extends AppCompatActivity {

    private static final String TAG ="tAAAAAAAAAAg" ;
    private ArrayList<String> imagelist;
    RecyclerView recyclerView2;
    FirebaseFirestore db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        db = FirebaseFirestore.getInstance();

        recyclerView2 = (RecyclerView) findViewById(R.id.recview2);
        recyclerView2.setLayoutManager(new GridLayoutManager(Main2Activity.this,2));
        imagelist= new ArrayList<>();
        DocumentReference docRef = db.collection("Wallpapers").document("Aquaman");
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document != null) {
                        Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData());
                         for(int i=1;i<document.getData().size();i++){
                            document.get(i+"");
                             imagelist.add(document.get(i+"").toString());
                             Log.e(TAG,document.get(i+"").toString());
                        }
                            ImageAdapter imageAdapter = new ImageAdapter(imagelist,Main2Activity.this);
                            recyclerView2.setAdapter(imageAdapter);
                    } else {
                        Log.d(TAG, "No such document");
                    }
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
            }
        });
    }
            }

I want to load the images from the db to my recycler view

the current result am getting is the .error(R.drawable.error) from picasso.Please help. Is that a problem with https:


Solution

  • This answer is because, I cannot clearly specify it in comments:

    There is no need of make this statement code:

    Picasso picasso = new Picasso.Builder(context)
            .downloader(new OkHttpDownloader(client))
            .build();
    

    You can directly call it by:

    Picasso.with(context)
            .load(Mylist2.get(position))
            .placeholder(R.drawable.superman)
            .error(R.drawable.error)
            .into(holder.image2);