Новое для Android-разработчика и пытается получить Контекст в моем адаптере приложения, но я продолжаю получать исключения из нуля. Моя попытка загрузить строку url в glide, но glide.with(context)
не работает. Приложение извлекает значения из sqlite (эта часть отлично работает), теперь я пытаюсь получить одно из этих значений (url) и установить его в изображение через glide. XML имеет все необходимые представления.Контекст адаптера для Android
ошибка: Вы не можете создать нагрузку на нулевой контекст в com.bumptech.glide.manager.RequestManagerRetriever.get
UsersAdapter.java
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
private ArrayList<User> mDataSet;
public UsersAdapter(ArrayList<User> mDataSet) {
this.mDataSet = mDataSet;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_favorites2, parent, false);
UserViewHolder userViewHolder = new UserViewHolder(v);
return userViewHolder;
}
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
holder.name_entry.setText(mDataSet.get(position).getName());
holder.email_entry.setText(mDataSet.get(position).getEmail());
holder.icon_entry.setText(""+mDataSet.get(position).getName().charAt(0));
String name = mDataSet.get(position).getName();
String url = mDataSet.get(position).getEmail();
// load image into imageview using glide
Glide.with(context)
.load(url)
.asBitmap()
.placeholder(R.drawable.ic_blank)
.error(R.drawable.ic_blank)
.into(holder.ivFavorites);
}
@Override
public int getItemCount() {
return mDataSet.size();
}
public class UserViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView name_entry, email_entry, icon_entry;
ImageView ivFavorites;
UserViewHolder(View itemView) {
super(itemView);
cardView = (CardView) itemView.findViewById(R.id.user_layout);
name_entry = (TextView) itemView.findViewById(R.id.name_entry);
email_entry = (TextView) itemView.findViewById(R.id.email_entry);
icon_entry = (TextView) itemView.findViewById(R.id.icon_entry);
ivFavorites = (ImageView) itemView.findViewById(R.id.ivFavorites);
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
}
Чтение о адаптерах и контексте Я пробовал следующее, но с минимальным успехом.
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
private ArrayList<User> mDataSet;
private Context context;
public UsersAdapter(ArrayList<User> mDataSet) {
this.mDataSet = mDataSet;
}
public UsersAdapter(ArrayList<User> mDataSet, Context context) {
this.context = context;
}
Мои Favorites.java активность, которая тянет значения из SQLite и отображает их в cardview (это также работает хорошо, хотя я не могу скользить, чтобы загрузить изображение):
общественный класс Избранные расширяет AppCompatActivity {
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private UsersAdapter adapter;
private DBHandler dbHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorites);
recyclerView = (RecyclerView) findViewById(R.id.usersList);
recyclerView.setHasFixedSize(true);
layoutManager = new GridLayoutManager(this,2);
recyclerView.setLayoutManager(layoutManager);
dbHandler = new DBHandler(Favorites.this);
Log.d("Reading: ", "reading contacts..");
ArrayList<User> users = dbHandler.getAllUsers();
adapter = new UsersAdapter(users);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
GridLayoutManager использует контекст. Так же и DatabaseHandler. В частности, 'this', который является Activity. Вы можете скопировать один и тот же шаблон в свой конструктор Adapter –