这是我的 MainActivity.java,我在其中实例化静态 SharedPreferences 及其编辑器:
public static SharedPreferences settings;
public static SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
settings = PreferenceManager.getDefaultSharedPreferences(this);
editor = settings.edit();
然后,我对另一个 java 类进行 AsyncTask 调用,在其中尝试将 onPostExecute 方法中的 token 存储到此 SharedPreferences。
@Override
protected void onPostExecute(String result) {
MainActivity.editor.putString("auth_token", result);
MainActivity.editor.commit();
Log.d("token", MainActivity.settings.getString("auth_token", "Nothing"));
}
此 Log.d() 方法在控制台中输出标记值,即“OK”。但随后我启动了一项 Activity Next.java,尝试使用以下命令在屏幕上获取此 token :
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
String auth_token_string = MainActivity.settings.getString("auth_token", "Nothing");
text = (TextView) findViewById(R.id.logintxt);
text.setText(auth_token_string);
屏幕上的结果是默认的字符串“Nothing”。
我在这里做错了什么? ...这是使用 SharedPreferences 的正确方法吗?我在这个topic中得到了这个想法.
编辑:
来自 AuthorizeActivity.java 的代码,我在其中调用 asyncTask:
public void getToken(String code){
AsyncTask<String, Void, String> tsk = new Api().execute(code);
Intent i = new Intent(this.getBaseContext(), Next.class);
dialog.dismiss();
startActivity(i);
}
最佳答案
您的设置变量是静态的,当您访问 Next.java 中的设置时,它在 MainActivity 的 onCreate 方法中初始化,但尚未初始化。
您可以访问 Next.java 中的 SharedPreferences(它是共享的)。
编辑:
在MainActivity中添加更新方法:
public void update() {
Intent i = new Intent(this.getBaseContext(), Next.class);
startActivity(i);
}
你的 postExecute 应该是这样的:
@Override
protected void onPostExecute(String result) {
MainActivity.editor.putString("auth_token", result);
MainActivity.editor.commit();
Log.d("token", MainActivity.settings.getString("auth_token", "Nothing"));
((MainActivity) context).update();
}
关于java - 从android中的SharedPreferences获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27591503/