【问题标题】:Android Intent.FLAG_ACTIVITY_CLEAR_TOP clears SharedPreferences?Android Intent.FLAG_ACTIVITY_CLEAR_TOP 清除 SharedPreferences?
【发布时间】:2019-03-14 15:40:03
【问题描述】:

我有一个具有以下活动流程 A->B->C 的应用程序。在活动 C 中,用户可以选择保存我存储在 SharedPreferences 文件中并调用 Intent.FLAG_ACTIVITY_CLEAR_TOP 的用户名和数据(转换为字符串的字符串和字符串数组)。这使他们回到活动 A。但是,当我尝试检查存储的用户名与他们现在输入的用户名时,我总是会遇到 NullPointerException。

private void saveData(){

    SharedPreferences session_data = getSharedPreferences("SESSION_DATA", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = session_data.edit();

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < myData.length; i++) {
        sb.append(myData[i]).append(",");
    }

    editor.putString("SAVED_SCAN",sb.toString());
    editor.putString("SAVED_ID",myID);
    Toast.makeText(C.this,"Data Saved",Toast.LENGTH_LONG).show();
    endActivity();


}
private void endActivity(){
    Intent i = getBaseContext().getPackageManager()
            .getLaunchIntentForPackage( getBaseContext().getPackageName() );
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
}

然后回到活动 A.(textData is a EditText.getText().toString())

 SharedPreferences prf = getSharedPreferences("SESSION_DATA",MODE_PRIVATE);
 String testID = prf.getString("SAVED_ID",null);

 try {
       if(testID.equals(textData)){
             toast.makeText(A.this,"MATCH",Toast.LENGTH_LONG).show();
                    }
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }

【问题讨论】:

  • 您没有将数据保存到SharedPreferences。不要忘记致电editor.apply()
  • Android 工作室没有警告过你没有使用 apply() 和 commit() 方法。通常,如果您在初始化 SharePreference 编辑器时未使用任何这些方法,Android Studio 会显示警告

标签: java android save sharedpreferences


【解决方案1】:

将数据添加到共享首选项中:

SharedPreferences.Editor editor = getSharedPreferences("MY_PREFS_NAME",MODE_PRIVATE).edit();
  editor.putString("name", "myname");
  editor.putInt("id", 12);
  editor.apply()

从共享首选项中获取数据:

SharedPreferences prefs = getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE); 
String name= prefs.getString("name", "xyz"); // here xyz is the default value
int id = prefs.getInt("id", 0); // 0 is the default value.

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 2011-05-19
    • 2013-07-21
    • 2014-08-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多