json glide image load recyclerview

时间:2017-03-12 13:50:02

标签: android json android-recyclerview retrofit android-glide

我有这样的JSON响应:

    [{
    "id": 94640,
    "date": "2016-08-14T21:40:31",
    "slug": "terungkap-van-gaal-tolak-kehadiran-paul-pogba-di-mu",
    "title": {
        "rendered": "Terungkap, Van Gaal Tolak Kehadiran Paul Pogba di MU"
    },
    "better_featured_image": {
        "media_details": {
            "sizes": {
                "medium": {
                    "source_url": "http:\/\/www.opinianda.com\/wp-content\/uploads\/2016\/08\/Pogba-MU-300x300.jpg"
                }
            }
        }
    }
}, {
    "id": 94634,
    "date": "2016-08-14T19:51:50",
    "slug": "liverpool-bakal-fight-di-semua-kompetisi-musim-ini",
    "title": {
        "rendered": "Liverpool Bakal ‘Fight’ di Semua Kompetisi Musim ini"
    },
    "better_featured_image": {
        "media_details": {
            "sizes": {
                "medium": {
                    "source_url": "http:\/\/www.opinianda.com\/wp-content\/uploads\/2016\/08\/Klopp-300x300.png"
                }
            }
        }
    }
}, {
    "id": 94608,
    "date": "2016-08-14T13:12:29",
    "slug": "gara-gara-pogba-pirlo-dan-buffon-tertawakan-manchester-united",
    "title": {
        "rendered": "Gara-gara Pogba, Pirlo dan Buffon Tertawakan Manchester United"
    },
    "better_featured_image": {
        "media_details": {
            "sizes": {
                "medium": {
                    "source_url": "http:\/\/www.opinianda.com\/wp-content\/uploads\/2016\/08\/buffon_pirlo-300x300.jpg"
                }
            }
        }
    }
}]

我想用glide加载source_url。 即时通讯已经在onbindview上使用了滑动,但是它显示了我的错误"你无法加载一个空的上下文"

我的onload响应

            public void onResponse(Call<List<Coba>> call, Response<List<Coba>> response) {
            try {
                List<Coba> jsonResponse = response.body();
                data= new ArrayList<>();
                data.addAll(jsonResponse);
                adapter = new MyAdapter(data);
                adapter.notifyDataSetChanged();
                recyclerView.setAdapter(adapter);
                Log.i("HASIL", "onResponse: "+data);
            }catch (Exception e) {
                Log.d("onResponse", "There is an error");
                e.printStackTrace();
            }
        }

这是我的适配器类

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] mDataset;
private ArrayList<Coba> coba;
private Context mContext;

public static class MyViewHolder extends RecyclerView.ViewHolder {
    public CardView mCardView;
    public TextView mTextView;
    public TextView mDetView;
    public TextView mVerView;
    public ImageView mImgPost;

    public MyViewHolder(View v) {
        super(v);
        mImgPost = (ImageView) v.findViewById(R.id.iv_image);
        mCardView = (CardView) v.findViewById(R.id.card_view);
        mTextView = (TextView) v.findViewById(R.id.tv_text);
        mDetView = (TextView) v.findViewById(R.id.tv_blah);
        mVerView = (TextView) v.findViewById(R.id.tv_wew);

    }
}

// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(ArrayList<Coba> coba) {
    this.coba = coba;
}

// Create new views (invoked by the layout manager)
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                 int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_item, parent, false);
    // set the view's size, margins, paddings and layout parameters
    MyViewHolder vh = new MyViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
    Glide.with(mContext).load(String.valueOf(coba.get(position).getBetterFeaturedImage().getMediaDetails().getSizes().getMedium().getSourceUrl()))
            .thumbnail(0.5f)
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(holder.mImgPost);
    holder.mTextView.setText(Html.fromHtml(String.valueOf(coba.get(position).getTitle().getRendered())));
    holder.mDetView.setText(String.valueOf(coba.get(position).getSlug()));
    holder.mVerView.setText(String.valueOf(coba.get(position).getId()));
    holder.mCardView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            Intent intent = new Intent(v.getContext(),DetailBerita.class);
            v.getContext().startActivity(intent);
            System.out.println("Clicked");
        }
    });
}

@Override
public int getItemCount() {
    return (coba == null) ? 0 : coba.size();
}

}

错误日志:

java.lang.IllegalArgumentException: You cannot start a load on a null Context
                                                                                 at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:84)
                                                                                 at com.bumptech.glide.Glide.with(Glide.java:629)
                                                                                 at com.oktagon.sumberbola.sumberbola.adapters.MyAdapter.onBindViewHolder(MyAdapter.java:71)
                                                                                 at com.oktagon.sumberbola.sumberbola.adapters.MyAdapter.onBindViewHolder(MyAdapter.java:26)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6279)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6312)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5258)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5521)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5363)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5359)
                                                                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2141)
                                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1525)
                                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1488)
                                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:585)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3506)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3254)
                                                                                 at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3767)
                                                                                 at android.view.View.layout(View.java:15648)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4967)
                                                                                 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077)

如果删除imageview,没有任何错误。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您必须初始化mContext变量。

例如:

@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                 int viewType) {
     mContext = parent.getContext();
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_item, parent, false);
    // set the view's size, margins, paddings and layout parameters
    MyViewHolder vh = new MyViewHolder(v);
    return vh;
}

希望这有帮助。

抱歉我的英文。

答案 1 :(得分:1)

mContext 未初始化。

如果活动

adapter = new MyAdapter(activity.this,data);

如果片段

adapter = new MyAdapter(getActivity(),data);
相关问题