Android的 – 如何在非活动类中使用SharedPreferences?

如何在非Activity类中使用SharedPreferences? 我试着做一个通用的首选项工具类和导入android.content.Context但Eclipse仍然不会让我使用getSharedPreferences()

Solutions Collecting From Web of "Android的 – 如何在非活动类中使用SharedPreferences?"

SharedPreferences与上下文有关。 你只能通过上下文来引用它。

您可以简单地将上下文作为parameter passing给您的类。 例如在构造函数中。

在你的活动中做:

 MyClass myClass = new MyClass(this); 

我发现这个解决scheme是:

1 – 在MainActivity类(即在项目中获取任何上下文之前始终启动)为上下文创build一个静态variables:

public static Context contextOfApplication;

2 – 在这个类的重要方法(如onCreate,构造函数等)中使用getApplicationContext方法初始化此variables:

 public void onCreate() { contextOfApplication = getApplicationContext(); } 

3 – 在同一个类中为这个variables创build一个“getter”方法(它也必须是静态的):

 public static Context getContextOfApplication(){ return contextOfApplication; } 

4 – 在非活动类中通过静态调用创build的方法来获取上下文:

Context applicationContext = MyActivityClass.getContextOfApplication() ;

5 – 使用PreferenceManager类获取SharedPreferencesvariables:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); 

希望能帮助到你。

尝试使用应用程序上下文的默认首选项 。 上下文类似于应用程序在Linux或Windows上运行的环境(例如环境variables,如PATH窗口样式或控制台大小)。 每个活动和服务都有自己的上下文,例如屏幕方向,主题和标签等,但是对于您的应用程序,您不需要活动的上下文,您希望应用程序具有全局性,这是context.getApplicationContext ()是有用的。 这在整个应用程序相同,将始终给你相同的默认偏好。

使用这个代码到一个新的类。

 import android.content.Context; import android.content.SharedPreferences; /** * Created by Atiar Talukdar on 6/5/2017. */ public class TemporaryStorageSharedPreference { protected final static int DEFAULT = 0; int temp = 0; public int readSharedPreference(Context context, String spName,String key){ SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); return temp = sharedPreferences.getInt(key,DEFAULT); } public void writeSharedPreference(Context context,String ammount,String spName,String key ){ SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, DEFAULT); editor.commit(); } } 

首先,在你的class级中声明一个私人属性。 就我而言,我有一个BaseAdapter类:

 private final Context ctx; private final Vector<Acto> actos; public ActoAdaptador(Context ctx, Vector<Acto> as) { super(); this.ctx = ctx; this.actos = as; } 

那么,何时使用SharedPreferences:

 ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE) 

这种方式至less对我有用:)