【问题标题】:How to get a preference value into a static String variable?如何将首选项值放入静态字符串变量中?
【发布时间】:2013-04-14 23:09:54
【问题描述】:

我收到以下错误消息:

"不能对非静态方法进行静态引用 getPreferences(int) from type Activity" 是我的错误。 'TimeCardLogin' 必须是静态变量。”

如何获得对静态String 变量的偏好?

public class MyBaseURLContainer extends Activity {

    public static String urlPref = "";

    static String BASE_URL = 
           getPreferences(MODE_PRIVATE).getString("Name of variable",urlPref);

    public static final  String TimeCardLogin = BASE_URL + "/timecard";
}

【问题讨论】:

  • 这是一个关于 Java 的基本问题:您不能使用非静态方法设置静态变量(顺便说一句,这就是错误所说的)。

标签: java android android-activity


【解决方案1】:

我建议制作一个将 Context 作为参数的静态 getter。这样a)它会实际编译,并且b)如果你的base-url在某个时候发生了变化,它会加载最新的值,而不是像你的程序一样在开始时加载一次:

private final static String PREFS = "myUrlPrefs";

public static String getBaseUrl(Context context) {
    return context.getSharedPreferences(PREFS, MODE_PRIVATE).getString(
        "Name of variable",urlPref);
}

你会像这样从另一个活动中调用它:

String baseUrl = MyBaseUrlContainer.getBaseUrl(this);

或者从任何你可以访问这样的上下文的地方(一个活动就是一个上下文):

String baseUrl = MyBaseUrlContainer.getBaseUrl(myContext);

如果您必须在无法访问 Context 的地方使用此代码(在 Android 应用中几乎永远不会出现这种情况),您可以在检索到该值后存储该值,但在第一次您可以从上下文中获得它必须具有的值。

【讨论】:

  • 最好还是使用activity.getApplicationContext()
  • 感谢 Alex - 我改为使用上下文和固定的首选项名称。我的旧代码对于调用它的每个活动都有不同的值!很好的收获。
  • 而且,关于 getApplicationContext,我认为这个post 会支持我每次传递上下文。
猜你喜欢
  • 2022-07-25
  • 2019-08-14
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
相关资源
最近更新 更多