Java 在方法中使用GetDefaultSharedReferences

Java 在方法中使用GetDefaultSharedReferences,java,android,android-studio,sharedpreferences,Java,Android,Android Studio,Sharedpreferences,所以我在一个名为onLoadFinish的方法中使用getDefaultSharedReferences,它来自android的pdf库。 代码如下: public void onLoadFinish(DocumentState.OPEN state) { //some irrelevant code here SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(getActivity

所以我在一个名为onLoadFinish的方法中使用getDefaultSharedReferences,它来自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
}
因此,代码的主要任务是从我的示例中获取一个字符串值,将其转换为整数,并将该整数放入我的goTopage;,这使得应用程序跳转到我的pdf文档中的某个页面

问题在于这一部分:

PreferenceManager.getDefaultSharedPreferences(getActivity())

getActivity不工作。我也尝试过getApplicationContext。GetDefaultSharedReferences的括号中应该有什么?

首选项管理器应该与首选项活动一起使用

只需使用context.getSharedReferencesPref_name,context.MODE_PRIVATE

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

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

    }
需要上下文类的实例。方法是在类中声明的,因此,除非在任何片段继承中声明了onLoadFinish方法,否则不能使用它。根据您的评论,如果我理解正确,onLoadFinish在内部声明。如果是这样,您可以使用这个关键字传递上下文,因为活动是上下文的后续内容。如果此方法是在另一个类中声明的,则应通过构造函数注入等方式向其传递上下文

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

假设您有以下界面:

public interface MyInterface {
    void myAction();
}
您有一个类,该类实现了它,并需要一个上下文实例来完成这项工作:

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
        }
    }
}
或内部碎片:

MyClass myClass = new MyClass(getActivity());

你说getActivity不起作用是什么意思?无法解析方法“getActivity”你是在片段内部调用它吗?不,它相当复杂:我有一个活动,我从PDF库调用simplereaderview。这意味着我必须在这个simplereaderview活动中进行gotopage操作,在public void onloadfinish中要精确,你的第一个语句是错误的,它可以在任何地方使用,它只需要一个Context类的实例。好的,当我使用这个时,android studio说,无法应用于我的SimpleDocumentReader类,并希望我使SimpleDocumentReader扩展Android.content.Context。我应该这样做吗?@just_deko你确定SimpleDocumentReader是活动吗?你能显示你实现SimpleDocumentReaderListener接口的类的签名吗?公共类SimpleDocumentReader实现ReaderListener{}你是说这个吗?@just_deko是的。看起来SimpleDocumentReader不是活动,只是一个普通类。所以你应该通过构造器注入上下文,例如,你能把我链接到一个教程或者类似的东西上,给我一个方法吗?对不起,我还是java编程的初学者,这是我的第一个应用程序。
MyClass myClass = new MyClass(getActivity());