java - 从android中的SharedPreferences获取属性

标签 java android sharedpreferences

这是我的 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/

相关文章:

android - android 5 onInterceptTouchEvent 模块中的 SwipeRefreshLayout.java 没有中断

android - 在 Android Studio 中签署 Android apk 文件的最简单方法是什么?

android - 使用软件合成器将MIDI文件转换为原始音频

android - 使用 getStringSet 和 putStringSet 丢失一些值

java - HornetQ集群队列和故障节点: are messages lost?

java - 使用Rhino,我遇到了 "ReferenceError"异常

Android 使用 PreferenceManager 从 XML 设置首选项

android - 如何在 android 中为注册用户和非注册用户显示不同的菜单项?

java - 如何在 Java 中导入 Google Cloud 客户端库

java - 计算平均值和标准差