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

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

  • 将SharedPreferences文件保存到自定义目录或获取默认的SharedPreferences目录
  • 活动之间使用共享偏好的最佳方式是什么?
  • Android共享首选项不起作用
  • SharedPreferences中的string数组
  • 如何遍历共享偏好的所有键?
  • Android - 共享首选项有时会丢失
  • Android SharedPreferencesstring集 - 应用程序重新启动后,一些项目被删除
  • 共享首选项 - 单个值的最大长度
  • 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对我有用:)