无法恢复按钮可见性

Having trouble with regaining button visibility

我有几个按钮设置为可见并在单击按钮时消失,但是当我尝试调用 onResume 中的按钮状态时,它崩溃了。我在我的代码中做错了什么?任何帮助将不胜感激。

public class MainActivity extends AppCompatActivity {

Button add; Button del; Button button1; Button button2;

private Boolean set1; private Boolean set2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    add = (Button)findViewById(R.id.add);
    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showButton();
        }
    });

    del = (Button)findViewById(R.id.del);
    del.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            delBtn();
        }
    });
    button1 = (Button)findViewById(R.id.button1);
    button2 = (Button)findViewById(R.id.button2);

}

public void showButton(){
    Boolean btn1 = button1.isShown();

    if(!button1.isShown()){
        button1.setVisibility(View.VISIBLE);
    }
    if(btn1 && !button2.isShown()){
        button2.setVisibility(View.VISIBLE);
    }

}

public void delBtn(){
    Boolean bt1 = !button2.isShown();
    if(button2.isShown()){
        button2.setVisibility(View.GONE);
    }

    if (bt1 && button1.isShown()){
        button1.setVisibility(View.GONE);
    }
}

@Override
protected void onPause(){
    super.onPause();

    SharedPreferences.Editor editor = getPreferences(0).edit();
    set1 = button1.isShown();
    set2 = button2.isShown();

    editor.putBoolean("set1", set1);
    editor.putBoolean("set2", set2);

    editor.apply();

}

@Override
protected void onResume(){
    super.onResume();

    SharedPreferences prefs = getPreferences(0);
    Boolean restoreSet1 = prefs.getBoolean("set1", set1); //in the Logcat, this is where it says the error is. Am i making the wrong call to restore button state?
    if(restoreSet1){
        button1.setVisibility(View.VISIBLE);
    }
    Boolean restoreSet2 = prefs.getBoolean("set2", set2);
    if(restoreSet2){
        button2.setVisibility(View.VISIBLE);
    }

 }
}

这是我的 logcat:

  Caused by: java.lang.NullPointerException
        at lp.buttonApp.MainActivity.onResume(MainActivity.java:83)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1210)
        at android.app.Activity.performResume(Activity.java:5505)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2936)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2975)
        android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
        at android.app.ActivityThread.access0(ActivityThread.java:161)

android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5356)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)

        com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
        at dalvik.system.NativeStart.main(Native Method)

我认为您可能对共享首选项有疑问。

请使用以下内容保存到共享首选项中:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

为了阅读偏好:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

您可以参考 this link