json 滑动图片加载recyclerview
json glide image load recyclerview
我有 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"
}
}
}
}
}]
我想用滑行加载 source_url。
我已经在 onbindview 上使用了 glide 但它显示错误 "You cannot load a null Context"
我的加载响应
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();
}
}
这是我的适配器class
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 就没有问题。感谢您的帮助。
您必须初始化 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;
}
希望对您有所帮助。
对不起我的英语。
mContext 未初始化。
如果Activity
adapter = new MyAdapter(activity.this,data);
如果片段
adapter = new MyAdapter(getActivity(),data);
我有 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"
}
}
}
}
}]
我想用滑行加载 source_url。 我已经在 onbindview 上使用了 glide 但它显示错误 "You cannot load a null Context"
我的加载响应
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();
}
}
这是我的适配器class
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 就没有问题。感谢您的帮助。
您必须初始化 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;
}
希望对您有所帮助。
对不起我的英语。
mContext 未初始化。
如果Activity
adapter = new MyAdapter(activity.this,data);
如果片段
adapter = new MyAdapter(getActivity(),data);