在活动或应用关闭后,如何显示来自sharedPreferences的信息?

时间:2018-04-21 10:47:04

标签: java android sharedpreferences

即使在我的应用或活动关闭后,我也会显示一些我希望显示的信息。我有一个功能显示,如果我在onCreate()onStart()中调用它我的应用程序崩溃。

public void display()  {
        SharedPreferences sharedPref = getSharedPreferences("MedInfo", 
Context.MODE_PRIVATE);

        mText1.setText(sharedPref.getString("mText1", ""));
    }

以下是数据的保存方式

    public void savemMed1() {

        SharedPreferences sharedPref = getSharedPreferences("MedInfo", 
Context.MODE_PRIVATE);

        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("mText1", addMed.getText().toString());
        editor.apply();

    Toast.makeText(this, "Added", Toast.LENGTH_LONG).show();
    }

This is the part written with red from the Logcat:

这条线不适合图片:

java.lang.RuntimeException: Unable to start activity ComponentInfo{corina_holom.com.medplannerapp/corina_holom.com.medplannerapp.Reminder}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

这是我第一次使用java和android studio进行编程,而且我很难找到有用的教程。我不确定应该如何改变这个或者我应该使用 onStart()

这是我想要显示信息的活动的代码:

public class Reminder extends AppCompatActivity {

public TextView mText1, mText2, mText3;
private EditText addMed;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reminder);
    defineButtons();

}

public void defineButtons() {
    findViewById(R.id.mB1).setOnClickListener(buttonClickListener);
    findViewById(R.id.mB2).setOnClickListener(buttonClickListener);
    //findViewById(R.id.mB3).setOnClickListener(buttonClickListener);

}

private View.OnClickListener buttonClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.mB1:
                addMed = (EditText) findViewById(R.id.addMed);
                mText1 = (TextView) findViewById(R.id.mText1);
                mText1.setText(addMed.getText());
                savemMed1();

                break;
            case R.id.mB2:
                addMed = (EditText) findViewById(R.id.addMed);
                mText2 = (TextView) findViewById(R.id.mText2);
                mText2.setText(addMed.getText());
                break;
        }
    }
};

public void savemMed1() {

    SharedPreferences sharedPref = getSharedPreferences("MedInfo", Context.MODE_PRIVATE);

    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString("mText1", addMed.getText().toString());
    editor.apply();

    Toast.makeText(this, "Added", Toast.LENGTH_LONG).show();
}

}

1 个答案:

答案 0 :(得分:0)

问题在于,当您使用setText时,您的textview未初始化。确保在findViewById之前执行setText。最好的方法是在onCreate中做第一件事。当然要确保id与布局中的id相同。