【问题标题】:android.content.Context.getResources() on a null object referenceandroid.content.Context.getResources() 在空对象引用上
【发布时间】:2021-06-26 06:08:11
【问题描述】:

我有 2 个类,一个 RecyclerView 的 Adapter 类和一个 Fragment 类。当我在 Adapter 中执行 setOnclick 并调用 Fragment 类的方法时,应用程序崩溃了。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
        at android.widget.Toast.makeText(Toast.java:313)
        at com.ltud.food.Fragment.restaurantDetail.detailTabLayout.detail_datdonFragment.onAddProduct(detail_datdonFragment.java:134)
        at com.ltud.food.Fragment.restaurantDetail.detailTabLayout.FoodAdapter$1.onClick(FoodAdapter.java:73)
        at android.view.View.performClick(View.java:7155)
        at android.view.View.performClickInternal(View.java:7124)
        at android.view.View.access$3500(View.java:808)
        at android.view.View$PerformClick.run(View.java:27370)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:359)
        at android.app.ActivityThread.main(ActivityThread.java:7418)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

适配器类:

    @Override
    public void onBindViewHolder(@NonNull @NotNull foodViewHolder holder, int position) {
        Food food = foodArrayList.get(position);

        holder.name.setText(food.name);
        holder.price.setText(String.valueOf(food.price));
        holder.rate.setText(String.valueOf(food.rate));
        Glide.with(holder.food.getContext()).load(food.img).into(holder.food);



        holder.add_food.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                i++;
//                Toast.makeText(context,String.valueOf(i),Toast.LENGTH_SHORT).show();
                    if (!foodArrayList.get(position).isAddedTocart()){

                        foodArrayList.get(position).setAddedTocart(true);

                        detail_datdonFragment detail = new detail_datdonFragment();
                        detail.onAddProduct();

                    }


            }
        });
    }

片段:

    @Override
    public void onAddProduct() {
        cart_count++;
            Toast.makeText(context,cart_count,Toast.LENGTH_SHORT).show();

    }

界面:

public interface AddCallbacks {
    public void onAddProduct();
}

我现在该怎么办。有人可以帮我吗?

【问题讨论】:

    标签: java android android-fragments android-recyclerview


    【解决方案1】:

    试试下面的代码,它会对你有所帮助。

    class DetailsFragment extends Fragment implements RVAdapter.AddCallbacks {
    
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        RVAdapter rvAdapter = new RVAdapter();
        rvAdapter.setCallback(this);
    }
    
    @Override
    public void onAddProduct(int pos) {
         Toast.makeText(context,""+cart_count,Toast.LENGTH_SHORT).show();
    }
    
    }
    
    
     // this is your adapter class
    class RVAdapter extends RecyclerView.Adapter<RVAdapter.RVHolder> {
    private AddCallbacks addCallbacks;
    
    public void setCallback(AddCallbacks addCallbacks) {
        this.addCallbacks = addCallbacks;
    }
    
    @NonNull
    @Override
    public RVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return null;
    }
    
    @Override
    public void onBindViewHolder(@NonNull RVHolder holder, int position) {
        holder.add_food.setOnClickListener(new View.OnClickListener(){
    
            @Override
            public void onClick(View v) {
                addCallbacks.onAddProduct(position);
            }
        });
    }
    
    @Override
    public int getItemCount() {
        return 0;
    }
    
    public interface AddCallbacks {
        public void onAddProduct(int pos);
    }
    
    class RVHolder extends RecyclerView.ViewHolder {
        public RVHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
    }
    

    【讨论】:

    • 你能在代码中显示你在 onAddProduct(position) 里面写了什么逻辑
    • 并且不能将 int 值设置为 Toast ,应该是这样的 (Toast.makeText(context,""+cart_count,Toast.LENGTH_SHORT).show();)
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 2017-01-12
    • 2020-04-17
    • 2020-03-08
    • 2017-01-09
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多