RecyclerView.Adapterを拡張するCustomAdapterのonBindViewHolder()メソッド内でGoogle Volley ImageRequestを実装する際に問題が発生しました。攻撃ラインには「>>>>>>>>>>」とマークされています。 エラーは発生しません。返されたビットマップをイメージビューに設定することはできません。代わりに何もしません。google volley + recyclerビューでimageView.setBitmap()を実行できない
「$$$ GOOD:...」というログが正しいURLを報告しているため、volleyがビットマップを正常に取得していることが確認されています(または少なくとも考えています) )はnullではありません。ビットマップ
マイアダプタを設定することができるはずですので、また、私は、それを正しくやっている、()などの成功onResponseに青にImageViewの背景を設定するなど、他のアクションを試してみました:
package com.tba.herpderp;
import android.graphics.Bitmap;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.NetworkImageView;
import java.util.ArrayList;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private static final String TAG = "CustomAdapter";
private ArrayList<person> ourlist;
public static class ViewHolder extends RecyclerView.ViewHolder {
private final NetworkImageView imageView;
private final TextView name;
private final TextView bio;
private final TextView distance;
private final TextView exp;
public ViewHolder(View v) {
super(v);
// Define click listener for the ViewHolder's View.
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something on item click
}
});
imageView = (NetworkImageView) v.findViewById(R.id.imageView);
name = (TextView) v.findViewById(R.id.Nickname);
bio = (TextView) v.findViewById(R.id.Bio);
exp = (TextView) v.findViewById(R.id.Experience);
distance = (TextView) v.findViewById(R.id.Distance);
}
public NetworkImageView getImageView() {
return imageView;
}
public TextView getName() {
return name;
}
public TextView getBio() {
return bio;
}
public TextView getDistance() {
return distance;
}
public TextView getExp() {
return exp;
}
}
// END_INCLUDE(recyclerViewSampleViewHolder)
public CustomAdapter(ArrayList<person> list) {
ourlist = list;
}
// BEGIN_INCLUDE(recyclerViewOnCreateViewHolder)
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view.
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.single_list_item, viewGroup, false);
return new ViewHolder(v);
}
// END_INCLUDE(recyclerViewOnCreateViewHolder)
// BEGIN_INCLUDE(recyclerViewOnBindViewHolder)
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
// Get element from your dataset at this position and replace the contents of the view
// with that element
final person temp = ourlist.get(position);
// GET IMAGE USING VOLLEY
ImageRequest request = new ImageRequest(MainActivity.DB_HOST + "/" + temp.getPhoto(),
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
>>>>>>>>>> viewHolder.getImageView().setImageBitmap(bitmap);
Log.i(TAG, "$$$ GOOD: " + MainActivity.DB_HOST + "/" + temp.getPhoto());
Log.i(TAG, "$$$ GOOD: " + bitmap.toString());
}
}, 0, 0, null,
new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
// you could set an error bitmap into the imageview here if you want
Log.i(TAG, "$$$ BAD: " + MainActivity.DB_HOST + "/" + temp.getPhoto());
}
});
// Access the RequestQueue through your singleton class.
Z_VolleySingleton.getInstance().getRequestQueue().add(request);
viewHolder.getName().setText(temp.getNick());
viewHolder.getBio().setText(temp.getBio());
viewHolder.getDistance().setText(temp.getDistance().toString());
viewHolder.getExp().setText(temp.getExperience());
}
// END_INCLUDE(recyclerViewOnBindViewHolder)
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return ourlist.size();
}
}
私が使用した新しいImageRequest()コンストラクタは駄目だと気付きましたが、まだAndroid Developerチュートリアルでそれを使用しているが、これは問題ではないと思います。
ヒントをいただければ幸いです。ありがとう!