android - 即使应用程序关闭也存储字符串

标签 android string nullpointerexception sharedpreferences

我正在尝试从用户那里获取字符串并稍后在应用程序关闭时使用它..现在它只在应用程序处于后台时工作但是当我关闭应用程序时我丢失了字符串..有没有办法这样做,否则我必须使用 SharedPreference,如果我必须使用它,请解释如何使用,因为我尝试过但失败了。非常感谢。

这是我在 MainActivity 中的代码到 EditText 中的字符串

public class MainActivity extends AppCompatActivity {
private SharedPreferences sharedPreferences;
private static String reminder;
 private EditText et;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    // initialize variables


    sharedPreferences = getSharedPreferences("MyPREFERENCES",Context.MODE_PRIVATE);
    final SharedPreferences.Editor editor = sharedPreferences.edit();
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            et = (EditText) findViewById(R.id.Name);
            reminder = et.getText().toString();
            if(reminder == null){
                reminder = "TWEAK!";
            }

            editor.putString("TAG",reminder);
            editor.commit();
            // do stuff
}

// get the user's string
public String getRem() {
    reminder = sharedPreferences.getString("TAG", "");
    return reminder;
}

应用程序崩溃并给出

"Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference"

在这一行

reminder = sharedPreferences.getString("TAG", "");

这是我调用方法的类

public class Notifications extends BroadcastReceiver {
private String rem;

      // set notification
@Override
public void onReceive(Context context, Intent intent) {
    // object to access MainActivity methods
    MainActivity main = new MainActivity();
    rem = main.getRem();
}

最佳答案

无论您在哪里调用 getRem() 的方法,您都不能在 Activity 之外执行此操作,因为 SharedPreferences 为空。

比如,我假设您创建了一个 new MainActivity(),然后调用了 getRem(),也许吧?

您需要从可用的Context中再次获取SharedPreferences,然后您可以使用getString("TAG", "")

编辑 借自Shared preferences inside broadcastreceiver

public class Notifications extends BroadcastReceiver {

    private String rem;

    // set notification
    @Override
    public void onReceive(Context context, Intent intent) {
        setRem(context);
    }

    private void setRem(Context context) {
        SharedPreferences prefs = context.getSharedPreferences("MyPREFERENCES",Context.MODE_PRIVATE);
        rem = prefs.getString("TAG", "");
    }

}

关于android - 即使应用程序关闭也存储字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40497958/

相关文章:

java - 按钮的 setOnClickListener 不起作用

Javascript string.match 拒绝返回包含多个匹配项的数组

c# - Xamarin C# 安卓 : change color text in a substring?

c# - 如何在 C# 中将 GUID 转换为字符串?

python - 如何将带分隔符的字符串拆分成一个集合?

android - 当我为警告对话框中的编辑文本执行 getText() 时获取空指针 (Android)

java - 未知为何抛出 NullPointerException

android - Android 中的 FileInputStream NullPointerException

android - YouTube API : com. google.api.client.googleapis.json.GoogleJsonResponseException: 403 禁止访问

android - MotionLayout 阻止所有 View 上的 ClickListener