簡體   English   中英

發生配置更改時片段中 OnClickListener 中的 Null 指針異常

[英]Null pointer exception in OnClickListener in fragment when configuration change occur

嗨,我是 Android 的新手,當我的應用程序中發生配置更改(從縱向到橫向)時,我收到 Null 點異常這是我的簡單計算器應用程序

我在片段中的代碼是:


公共 class CalculatorFragment 擴展 Fragment {

private TextView mTextViewString;
private boolean mLastNumeric;
private boolean mStateError;
private boolean mLastDot;

private Button mButtonDelete;
private Button mButtonOne;
private Button mButtonTwo;
private Button mButtonThree;
private Button mButtonFour;
private Button mButtonFive;
private Button mButtonSix;
private Button mButtonSeven;
private Button mButtonEight;
private Button mButtonNine;
private Button mButtonZero;
private Button mButtonSum;
private Button mButtonDivide;
private Button mButtonNegative;
private Button mButtonPoint;
private Button mButtonEqual;
private Button mButtonMultiply;


public CalculatorFragment() {

}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_calculator, container, false);
    findViews(view);
    setNumericOnClickListener();
    setOperatorOnClickListener();
    return view;
}

private void findViews(View view) {
    mTextViewString = view.findViewById(R.id.textView_show_number);
    mButtonDelete = view.findViewById(R.id.button_delete);
    mButtonOne = view.findViewById(R.id.button_one);
    mButtonTwo = view.findViewById(R.id.button_two);
    mButtonThree = view.findViewById(R.id.button_three);
    mButtonFour = view.findViewById(R.id.button_four);
    mButtonFive = view.findViewById(R.id.button_five);
    mButtonSix = view.findViewById(R.id.button_six);
    mButtonSeven = view.findViewById(R.id.button_seven);
    mButtonEight = view.findViewById(R.id.button_eight);
    mButtonNine = view.findViewById(R.id.button_nine);
    mButtonNegative = view.findViewById(R.id.button_negative);
    mButtonSum = view.findViewById(R.id.button_sum);
    mButtonDivide = view.findViewById(R.id.button_divide);
    mButtonMultiply = view.findViewById(R.id.button_multiply);
    mButtonZero = view.findViewById(R.id.button_zero);
    mButtonPoint = view.findViewById(R.id.button_point);
    mButtonEqual = view.findViewById(R.id.button_equal);
}

private void setNumericOnClickListener() {
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button button = (Button) v;
            if (mStateError) {
                mTextViewString.setText(button.getText());
                mStateError = false;
            } else {
                mTextViewString.append(button.getText());
            }
            mLastNumeric = true;

        }
    };
    
    mButtonZero.setOnClickListener(listener);
    mButtonOne.setOnClickListener(listener);
    mButtonTwo.setOnClickListener(listener);
    mButtonThree.setOnClickListener(listener);
    mButtonFour.setOnClickListener(listener);
    mButtonFive.setOnClickListener(listener);
    mButtonSix.setOnClickListener(listener);
    mButtonSeven.setOnClickListener(listener);
    mButtonEight.setOnClickListener(listener);
    mButtonNine.setOnClickListener(listener);

}

我在 Android Studio 中的錯誤文本是:


嘗試在 null object 參考 mButtonZero 上調用虛擬方法

java.lang.NullPointerException:com.example.calculator.controller.fragments.CalculatorFragment.setNumericOnClickListener(CalculatorFragment.java:107)

Android 在應用程序消失(打開另一個應用程序)或配置更改(旋轉等)時殺死對象,因此您必須確保在使用它之前獲取對象實例。

正如我在您的代碼中看到的那樣,在您的“setNumericOnClickListener”方法中,您嘗試將“onClickListener”分配給每個按鈕 object,但是當應用程序暫停或停止(旋轉或打開另一個應用程序)時它們設置為 null ,您應該確保這些對象不是 null。 我建議您在“onResume”回調方法上實例化它們。

You can learn more about the Android Activity LifeCycle Here: URL: https://developer.android.com/guide/components/activities/activity-lifecycle

您可以在此處了解有關 Android 片段生命周期的更多信息: https://developer.android.com/guide/components/fragments

您可以在此處獲得有關片段和活動如何相互關聯的更多詳細信息: 在片段生命周期期間何時調用 onAttach?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM