This question already has answers here:
What is a NullPointerException, and how do I fix it?

(12个答案)


2年前关闭。




我在我的应用程序中有recyclerview,并且当按下列表项时,底部对话框会在我有两个按钮的地方扩展,但是我无法为其设置点击侦听器。
这是适配器中的onClick方法

BottomSheetDialog offer_info_dialog;
RelativeLayout rel;
Button Yes,No;
View parentView;
@Override
public void onClick(View view) {
    rel = (RelativeLayout) activity.findViewById(R.id.bottomsheet);
    Yes = (Button) offer_info_dialog.findViewById(R.id.confirm_btn_on_info);
    No = (Button) offer_info_dialog.findViewById(R.id.cancel_btn_on_info);
        offer_info_dialog = new BottomSheetDialog(context);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        parentView = inflater.inflate(R.layout.offer_info_layout, null);
        offer_info_dialog.setContentView(parentView);
        ((View) parentView.getParent()).setBackgroundColor(context.getResources().getColor(android.R.color.transparent));
        offer_info_dialog.show();
        rel.setVisibility(View.INVISIBLE);

    Yes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MainActivity.removeCheatOfferMarkers(2);
        }
    });

    No.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from((View) parentView.getParent());
            bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
        }
    });
    offer_info_dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            rel.setVisibility(View.VISIBLE);
        }
    });

}


这是一个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.support.design.widget.BottomSheetDialog.findViewById(int)' on a null object reference

最佳答案

这里有多个问题。


在扩大视图之前,您正在调用findViewById。这将导致空指针异常。 findViewById仅应在AFTER inflater.inflate被调用后调用,除非您的活动(我认为已经被夸大)除外。
看一下您的代码。在尝试开始在其上调用方法之前,尚未将offer_info_dialog初始化为任何内容,这就是为什么要获取空指针的原因。

10-08 15:34