Java 活动或应用关闭后,如何显示SharedReferences中的信息?

Java 活动或应用关闭后,如何显示SharedReferences中的信息?,java,android,sharedpreferences,Java,Android,Sharedpreferences,即使在我的应用程序或活动关闭后,我也会放置一些我想要显示的信息。我有一个函数显示,如果我在onCreate()或onStart()中调用它,我的应用程序就会崩溃 public void display() { SharedPreferences sharedPref = getSharedPreferences("MedInfo", Context.MODE_PRIVATE); mText1.setText(sharedPref.getString("mTe

即使在我的应用程序或活动关闭后,我也会放置一些我想要显示的信息。我有一个函数显示,如果我在
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();
    }

这是一条与图片不符的线:

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();
}

}

问题在于,当您使用
setText
时,您的文本视图尚未初始化。在执行
setText
之前,请确保执行
findViewById
。最好的方法是在
onCreate
中首先执行此操作。当然,还要确保id与布局中的id相同

您可以发布错误日志吗?首先尝试查找导致崩溃的问题。它没有任何错误。该应用程序开始在我的手机上运行,但当我单击打开我希望显示信息的活动的按钮时,它会崩溃。只有在onCreate()或onStart()中调用display()时才会发生这种情况。我认为您的意思是在生成/编译时没有错误,但如果应用程序崩溃,则表示在运行时有错误。一旦应用程序崩溃,你可以在Android Studio底部的Logcat部分看到错误日志。在那里选择错误过滤器,你会看到错误日志,你感兴趣的部分可能会有蓝色的线条,直接指向导致崩溃的代码部分。图片中的内容足够了吗?我添加了整个代码。我以前以为它会初始化textviewsetText@CorinaHolom不要在onclick中执行
findViewById
在onCreate中执行,直接在
onCreate
中初始化所有视图,就像这样
mText1=(TextView)findViewById(R.id.mText1)
@CorinaHolom很高兴它有帮助:)只是为了将来,只做
findViewById
一次和第一件事。例如,在
onCreate
中,您可以执行
mTextView1=findViewById(R.id.mText1)
,然后使用
mTextView1
设置
onClickListener
如下
mTextView1=setOnClickListener(buttonClickListener)