Android 适配器上下文

Android adapter context

Android dev 的新手并试图在我的应用程序适配器中获取上下文,但我不断收到空异常。我尝试将 url 字符串加载到滑行中,但 glide.with(context) 不起作用。该应用程序从 sqlite 中提取值(这部分工作正常),我现在正在尝试获取这些值之一(url)并通过 glide 将其设置到 imageview。 XML 具有所需的所有视图。

错误:您无法在 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;
}

My Favorites.java activity 它从 sqlite 中提取值并将它们显示在 cardview 中(这也可以正常工作,尽管我无法滑行加载图片):

public class 收藏夹扩展 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();
}

}

初始化适配器时传递上下文

adapter = new UsersAdapter(users,getApplicationContext());

并在您的适配器中实现等效的构造函数

public UsersAdapter(ArrayList<User> mDataSet, Context context) {
    this.context = context;
    this.mDataSet = mDataSet;
}