在另一个活动中调用静态对象的共享首选项?

时间:2017-03-14 13:36:43

标签: android

我遇到了尝试将设置首选项字符串附加到我拥有的另一个字符串上的问题。

目前我有:

public class MyApp extends Application {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    public static final String USER_LOGIN = "https://example.com";

@Override
public void onCreate(){
    super.onCreate();

    myFunction(USER_LOGIN);
}

我正试图通过以下方式实现这一目标:

public class MyApp extends Application {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    public static final String USER_LOGIN = "https://" + preferences.getString(SettingsFragment.USER_SITE, "");

@Override
public void onCreate(){
    super.onCreate();

    myFunction(USER_LOGIN);
}

然而,Android Studio告诉我“无法从静态上下文中引用非静态字段'首选项”。我怎样才能引用这个字段?

3 个答案:

答案 0 :(得分:1)

自" SharedPreferences偏好"是Object的成员,它不能被静态成员使用。所以改变:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

static SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

答案 1 :(得分:0)

只需在onCreate内分配:

public class MyApp extends Application {

    SharedPreferences preferences;
    private String USER_LOGIN;

    @Override
    public void onCreate(){
        super.onCreate();

        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        USER_LOGIN = "https://" + preferences.getString(SettingsFragment.USER_SITE, "");

        myFunction(USER_LOGIN);
    }

}

答案 2 :(得分:0)

你的功能是否在同一个活动中?如果是,请尽量不传递静态变量? 而是直接在" myfunction"中访问它。 我认为没有必要这样称呼它并使它同时保持静止。