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);
    }

    ...

}