尝试在Android中的空对象引用上调用虚方法'java.lang.Object android.content.Context.getSystemService(java.lang.String)'

问题描述 投票:-2回答:1

我在tablayout中创建了一个cardview,但我在适配器类中遇到错误.Below是logcat,适配器类和Demo java类。我试图在google以及stackover流程中找到但很遗憾我无法找到解决方案。请帮我解决这个错误,因为我是android的初学者。

logcat的

2019-04-06 22:14:37.450 32524-32524/com.example.counter E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.counter, PID: 32524
    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.counter.MyAdapter.onCreateViewHolder(MyAdapter.java:43)
        at com.example.counter.MyAdapter.onCreateViewHolder(MyAdapter.java:28)

适配器类

    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ProductViewHolder>  { // error getting

        private Context context;
        private List<Demo> demos;



        public MyAdapter(Context context, List<Demo> demos) {
            this.context = context;
            this.demos = demos;
        }


        @NonNull
        @Override
        public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {    // error getting 
                LayoutInflater layoutInflater = LayoutInflater.from(context);
                View view = layoutInflater.inflate(R.layout.list_layout, viewGroup, false);
                return new ProductViewHolder(view);

        }
 @Override
    public void onBindViewHolder(@NonNull ProductViewHolder productViewHolder, int i) {
        final Demo demo = demos.get(i);
        productViewHolder.textview1.setText(demo.getTextview1());
        productViewHolder.textview2.setText(demo.getTextview2());
        productViewHolder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tv1 = demo.getTextview1();
                Intent intent = new Intent(context, MainActivity.class);
                intent.putExtra("text_1", tv1);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
                ((Activity)context).finish();
                Animatoo.animateSlideRight(context);
            }
        });
    }
    @Override
    public int getItemCount() {
        return demos.size();
    }
    public class ProductViewHolder extends RecyclerView.ViewHolder {
        TextView textview1, textview2;
        CardView cardView;
        public ProductViewHolder(@NonNull View itemView) {
            super(itemView);
            textview1 = itemView.findViewById(R.id.textview1);
            textview2 = itemView.findViewById(R.id.textview2);
            cardView = itemView.findViewById(R.id.cardview);
        }
    }
}

演示课程

public class Demo {
    private String textview1,textview2;

    public Demo(String textview1, String textview2) {
        this.textview1 = textview1;
        this.textview2 = textview2;
    }

    public String getTextview1() {
        return textview1;
    }

    public String getTextview2() {
        return textview2;
    }


}

frag1.Java

public class Frag1 extends Fragment {
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
    Context c;
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.frag_1,container,false);
        recyclerView=view.findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(c));
        ArrayList<Demo> demoList=new ArrayList<>();
        demoList.add(new Demo("A","B"));
        adapter=new MyAdapter(c,demoList);
        recyclerView.setAdapter(adapter);
        return view;
    }
}
android
1个回答
-1
投票

Frag1类中的Context显然是null。你应该在Frag1类中传递getActivity()而不是Context

adapter=new MyAdapter(getActivity(),demoList);
© www.soinside.com 2019 - 2024. All rights reserved.