我想在非活动网址常量类中获取共享偏好值,我需要检查哪个网址来自之前的活动。我正在使用通用的共享首选项实用程序类,我使用共享首选项管理器通过共享首选项放置和获取值;但是每当我尝试访问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);
}
答案 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.preference
和java.util.pref
,所以请确保你是指向你的项目类不是android java默认calss。或者您可以尝试使用其他