我只有一个类需要访问SharedPreferences:

public class MyUtils {

    public static String packageMe(Object input){
        // do stuff here
        // need SharedPreferences here
    }

    public static Object unpackageMe(String input){
        // do stuff here
        // need SharedPreferences here
    }
}


我尝试了这个:

public class MyUtils extends Activity


但是,正如您所知,我无法从静态方法访问SharedPreferences。

我曾考虑过将上下文传递给静态方法,但这将类的数量扩展到了我需要修改的四个,而这些类已经在扩展AsyncTask了:

public class SomeClass01 extends AsyncTask {
    @Override
    protected Object doInBackground(Object[] params){
        MyUtils.packageMe(abc_123_object);
        // do stuff here
    }
}


因此,我认为也许可以将上下文传递给这四个类。但是,我需要修改使用这四个类的几十个类,而这些类又将使用单个类。

public class SomeTopClass extends FragmentActivity implements x, y, z {
    new SomeClass01.execute(abc_123_object);
    // do stuff here
}


我不知道是否要传递深入我的代码的上下文引用。

我在StackOverflow上看到了有关在abc_123_object模型中放置对SharedPreferences的引用的信息,但是我使用的对象很多(除了abc_123_object除外),我不想用jerry-rig那么多的类。

因此,有没有办法在我的代码周围不修改数十个类和传递上下文引用的情况下完成此操作,还是我被卡住了?

谢谢

最佳答案

在您的Application类中创建静态变量。

public class MyApp extends Application{
    public static Context context;
@Override
    public void onCreate() {
    context = this;
    }
}


然后在需要时使用它。

public static String packageMe(Object input){
        // do stuff here
        // need SharedPreferences here
        // context = MyApp.context
    }

关于android - 如何在不传递上下文引用的情况下从类中的静态方法访问Android SharedPreferences?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45360088/

10-12 00:22
查看更多