在方法中获取 SharedPreferences 的上下文

Getting context for SharedPreferences in a method

所以我的应用程序中有一个 pdf 插件,它使用 public class SimpleDocumentReader。这只是一个 class,而不是 activity。我有一个方法,您可以在完成加载后更改文档的页面:

@Override    
public void onLoadFinish(DocumentState.OPEN state) {
    if (state == OPEN.SUCCESS) {
    SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences();
                String page = pref.getString("example_list","");
                goToPage(Integer.parseInt(page));
       }
    }

如您所见,我想访问 defaultsharedpreferences,其中存储了一个字符串,我可以用它来更改页面。问题是,在 getDeaultSharedPreferences() 的括号中;我需要上下文。我已经尝试了几件事:

getApplicationContext()(无效),

getActivity() 也很蠢

还尝试使方法接收这样的上下文:

public void onLoadFinish(DocumentState.OPEN state, Context context) {

// line for getting sharedpreferences Context:
SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(context);
}

但是它会抛出几个错误: 首先,@Override 不起作用,因为

method does not override method from its superclass

第二个错误在顶部,class 本身:

public class SimpleDocumentReader implements ReaderListener {}

引发此错误:

Class "SimpleDocumentReader" 必须在 ReaderListener 中声明为抽象方法或实现抽象方法 'onLoadFinish(OPEN)'。

这是什么意思?

编辑:以下是 SimpleDocumentReader class 的启动方式:

首先,在我的 Activity:

中创建一个带有 SimpleReaderFactory 的 SimpleViewer
SimpleDocumentReader v = SimpleReaderFactory.createSimpleViewer(this, null);
v.openUrl("myurl", "mypassword");

二、SimpleReaderFactory:

public class SimpleReaderFactory {

    /**
     * Creates and returns a PDF viewer used for viewing, reading, and
     * navigating PDF document
     * 
     * @param act
     *            The activity of the current application.
     * @param listener
     *            The SimpleDocumentViewerListener instance.
     * 
     * @return SimpleDocumentViewer The default PDF document viewer instance
     */
    public static SimpleDocumentReader createSimpleViewer(Activity act,
            SimpleDocumentReaderListener listener) {

        SimpleDocumentReader viewer = new SimpleDocumentReader(act);
        viewer.setListener(listener);


        return viewer;
    }
}

最后,我的 SimpleDocumentReader:

    public class SimpleDocumentReader implements ReaderListener {
    // a lot of stuff here, I will post the important snippets of code:
    public void onLoadFinish(DocumentState.OPEN state) {
    if (state == OPEN.SUCCESS) {
                mControlView.init(mAct);

                RelativeLayout layout = new RelativeLayout(mAct);
                layout.addView(mReaderView);
                layout.addView(mControlView);

                mAct.setContentView(layout);

                CoordConverter.initCoordConverter(mAct, mReaderView);
                SharedPreferences pref= 
//my attempts at getting the defaultsharedpreferences
PreferenceManager.getDefaultSharedPreferences();
                String hour = pref.getString("example_list","");
                goToPage(Integer.parseInt(hour));
            }
}

What does that mean?

正如其名。显然,ReaderListener 要求您有一个带有签名 public void onLoadFinish(DocumentState.OPEN state)onLoadFinish()

关于您的整体问题,将 SharedPreferences 传递给 SimpleDocumentReader 的构造函数,它在数据成员中保留它并在 onLoadFinish() 中使用它。