如何在非Activity Java类中访问sharedpreference值?

时间:2017-12-01 18:16:36

标签: android sharedpreferences

我想在非活动网址常量类中获取共享偏好值,我需要检查哪个网址来自之前的活动。我正在使用通用的共享首选项实用程序类,我使用共享首选项管理器通过共享首选项放置和获取值;但是每当我尝试访问Url常量类中的共享首选项值时,我都无法访问公共共享首选项实用程序类。我怎样才能获得价值?请帮忙。 我的共享偏好课程是:

       public class Preference {

       private static final String PREFIX = "json";

       public static void setString(String key, String value, Context context) {
      SharedPreferences prefs = 
      PreferenceManager.getDefaultSharedPreferences(context);
      SharedPreferences.Editor editor = prefs.edit();
      editor.putString(key, value);
      editor.apply();

       }
      public static String getString(String key, Context context) {
      SharedPreferences preferences = 
       PreferenceManager.getDefaultSharedPreferences(context);
       return preferences.getString(key, null);
       }

3 个答案:

答案 0 :(得分:2)

你应该传递上下文,而不是使用上下文进行任何攻击

答案 1 :(得分:0)

理想情况下,我们应该完成一次并在任何地方访问它。我的意思是我们可以在启动Application类时创建一个Sharedpreference实例,并对该对象进行任何调用。

    public class AppController extends Application {

    static AppController appController;

    public static AppController getInstance(){
        return appController;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
        appController = this;
    }

}

在使用 name 属性的 application 标记中使用之前,首先在 manifest 中命名。

 <application
        android:name=".AppController"
        ......
        ......
</application>

因此我们可以在这里初始化我们的SharedPreference或获取这样的应用程序实例。我们也可以使用Dagger进行此操作并执行更多操作。

AppController.getInstance().getApplicationContext().getSharedPreferences("userdetails", MODE_PRIVATE);

OR

我们可以将上下文传递给非actvitiy / fragment类的一些构造函数。

答案 2 :(得分:0)

AS显示你的代码,你传递了没有问题的上下文,但你的类名Preference的问题应该类似于java内置类,如java.android.preferencejava.util.pref,所以请确保你是指向你的项目类不是android java默认calss。或者您可以尝试使用其他

更改您的util类