繁体   English   中英

在方法中使用getDefaultSharedPreferences

[英]Using getDefaultSharedPreferences in a method

因此,我在名为onLoadFinish的方法中使用getdefaultsharedpreferences(它来自android的pdf库)。 这是代码:

    public void onLoadFinish(DocumentState.OPEN state) {
    //some irrelevant code here
    SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(getActivity());
                String text = pref.getString("example_list","");
                int foo = Integer.parseInt(text);
                goToPage(foo);
    //some irrelevant code there
}

因此,代码的主要任务是从example_list首选项(字符串)中获取一个值,将其转换为整数,然后将该整数放入goTopage(); ,这会使应用程序跳到我的pdf文档中的特定页面。

问题是这部分:

PreferenceManager.getDefaultSharedPreferences(getActivity())

getActivity无法正常工作。 我也尝试过getApplicationContext()。 getDefaultSharedPreferences()的括号应该是什么?

PreferenceManager应该与PreferenceActivity一起使用。

只需使用context.getSharedPreferences("pref_name", Context.MODE_PRIVATE);

getDefaultSharedPreferences需要您的应用程序上下文一个参数,试试这个,

    public class MyActivity extends ActionBarActivity
    {
    ......
    .......
    PreferenceManager.getDefaultSharedPreferences(MyActivity.this);
    ......
    ......

    }

getDefaultSharedPreferences需要Context类的实例。 getActivity方法是在Fragment类中声明的,因此,除非您的onLoadFinish方法在任何Fragment后续类中声明,否则您将无法使用它。 根据您的评论,如果我对您的理解正确,则在Activity内声明onLoadFinish 如果是这样,您可以仅使用this关键字来传递上下文,因为ActivityContext的后继者。 如果在另一个类中声明了此方法,则应通过例如构造函数注入将上下文传递给它。

编辑通过构造函数注入提供上下文的示例。

假设您具有以下界面:

public interface MyInterface {
    void myAction();
}

并且您有一个实现该类的类,并且需要一个Context实例来进行工作:

public class MyClass implements MyInterface {

    private WeakReference<Context> mContext;

    public MyClass(Context context) {
        this.mContext = new WeakReference<Context>(context);
    }

    @Override
    public void myAction() {
        Context ctx = mContext.get();
        if (ctx != null){
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            //do stuff
        }
    }
}

如您所见, Context实例是通过构造函数注入的,我们没有对上下文进行严格引用(实际上,它取决于特定的需求)。 可以通过以下方式在Activity内部使用此类:

MyClass myClass = new MyClass(this);

或内部片段:

MyClass myClass = new MyClass(getActivity());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM