Java 在myAdapter中从上下文扩展布局时获取空引用
应用程序不断崩溃,我不断得到以下错误:Java 在myAdapter中从上下文扩展布局时获取空引用,java,android,adapter,nullreferenceexception,Java,Android,Adapter,Nullreferenceexception,应用程序不断崩溃,我不断得到以下错误: java.lang.NullPointerException: Attempt to invoke virtual method java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference at android.view.LayoutInflater.from(LayoutInflater.java:2
java.lang.NullPointerException: Attempt to invoke virtual method java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.view.LayoutInflater.from(LayoutInflater.java:229)
at com.example.cnatra_measure.Adapters.PopularAdapter.onCreateViewHolder(PopularAdapter.java:37)
at com.example.cnatra_measure.Adapters.PopularAdapter.onCreateViewHolder(PopularAdapter.java:19)
这是我的密码:
public class PopularAdapter extends RecyclerView.Adapter<PopularAdapter.ImageViewHolder> {
private Context mContext;
private List<Popular> mPopular;
public PopularAdapter(Context context, List<Popular> populars){
this.mContext = context;
mPopular = populars;
}
public PopularAdapter(List<Popular> mPopular) {
this.mPopular = mPopular;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(mContext).inflate(R.layout.popular_items,viewGroup, false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder imageViewHolder, int i) {
Popular popularCur=mPopular.get(i);
imageViewHolder.prod_name.setText(popularCur.getProduct_title());
imageViewHolder.prod_price.setText(popularCur.getProduct_price());
Picasso.get()
.load(popularCur.getProduct_image())
.placeholder(R.drawable.img_placeholder)
.fit()
.centerCrop()
.into( imageViewHolder.prod_img);
}
@Override
public int getItemCount() {
return mPopular.size();
}
class ImageViewHolder extends RecyclerView.ViewHolder {
TextView prod_name, prod_price;
ImageView prod_img;
ImageViewHolder(@NonNull View itemview){
super(itemview);
prod_name = itemview.findViewById(R.id.prodName);
prod_price = itemview.findViewById(R.id.prodPrice);
prod_img = itemview.findViewById(R.id.prodImage);
}
}
}
public类populardapter扩展了RecyclerView.Adapter{
私有上下文;
私人名单不受欢迎;
公共populardapter(上下文、列表populars){
this.mContext=上下文;
mPopular=大众;
}
公众播音员(公众列表){
this.mPopular=mPopular;
}
@非空
@凌驾
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
视图v=LayoutFlater.from(mContext)。充气(R.layout.popular_项目,视图组,false);
返回新的ImageViewHolder(v);
}
@凌驾
public void onBindViewHolder(@NonNull ImageViewHolder ImageViewHolder,int i){
Popular Popular=mpoppular.get(i);
imageViewHolder.prod_name.setText(popularCur.getProduct_title());
imageViewHolder.prod_price.setText(popularCur.getProduct_price());
毕加索
.load(popularCur.getProduct\u image())
.占位符(R.drawable.img_占位符)
.fit()
.centerCrop()
.into(imageViewHolder.prod_img);
}
@凌驾
public int getItemCount(){
返回mPopular.size();
}
类ImageViewHolder扩展了RecyclerView.ViewHolder{
text查看产品名称、产品价格;
图像视图产品;
ImageViewHolder(@NonNull视图项视图){
超级(项目视图);
prod_name=itemview.findviewbyd(R.id.prodName);
prod_price=itemview.findviewbyd(R.id.prodPrice);
prod_img=itemview.findviewbyd(R.id.prodImage);
}
}
}
拜托,我真的需要帮助理解我做错了什么,我是一个android初学者。在我看来,
上下文
在代码中的某个点上已经无效。我似乎不知道我在何处以及如何尝试使用片段,这让我有点困惑。您的代码是正确的,我建议您检查您的活动,看看您在何处创建适配器,并解决android的生命周期问题,可能SO正在终止您的活动,当活动再次创建时,适配器实例将丢失上下文
你可以发布活动的代码,这会有所帮助
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.view.LayoutInflater.from(LayoutInflater.java:229)
at com.example.cnatra_measure.Adapters.PopularAdapter.onCreateViewHolder(PopularAdapter.java:37)
at com.example.cnatra_measure.Adapters.PopularAdapter.onCreateViewHolder(PopularAdapter.java:19)
上面的错误告诉您,您正试图使用null上下文来扩大适配器项布局
这是因为您有两个构造函数:一个具有上下文,另一个不具有上下文
// Here you're passing the context to the adapter
public PopularAdapter(Context context, List<Popular> populars){
...
}
// No context here.
public PopularAdapter(List<Popular> mPopular) {
...
}
mContext
变量似乎为空。堆栈跟踪中的getSystemService(…)
方法在LaoyutInflater.from(mContext)
中对给定上下文调用。尝试改用viewGroup.getContext()
。
public class PopularAdapter extends RecyclerView.Adapter<PopularAdapter.ImageViewHolder> {
private List<Popular> mPopular;
// Use only one constructor.
public PopularAdapter(List<Popular> mPopular) {
this.mPopular = mPopular;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
// Use the viewGroup i.e parent of the Adapter.
Context context = viewGroup.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
// Inflate the layout
View v = inflater.inflate(R.layout.popular_items, viewGroup, false);
return new ImageViewHolder(v);
}
...
}