Возникла проблема с реализацией Google Volley ImageRequest в методе onBindViewHolder () CustomAdapter, который расширяет RecyclerView.Adapter. Линия наступления обозначена: «>>>>>>>>>>». Он не вызывает никаких ошибок, он просто не делает того, что должен делать (устанавливает возвращаемое растровое изображение в изображение) ... и вместо этого ничего не делает.
Я подтвердил, что залп успешно получает растровое изображение (или, по крайней мере, он так думает), потому что мои журналы, в которых говорится «$$$ ХОРОШО: ...», сообщают правильный URL-адрес, а bitmap.toString ( ) не равно нулю. Также я пробовал другие действия, такие как установка синего цвета фона изображения в успешном onResponse (), что он сделал правильно, поэтому он должен иметь возможность установить растровое изображение
Мой адаптер:
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.
Любые советы будут оценены. Спасибо!