获取方法中SharedPreferences的上下文

时间:2015-04-06 11:02:08

标签: java android methods android-studio sharedpreferences

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

@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无效,因为

  

方法不会覆盖超类

中的方法

第二个错误位于顶部,类本身:

public class SimpleDocumentReader implements ReaderListener {}

引发此错误:

类“SimpleDocumentReader”必须声明为abstract或在ReaderListener中实现抽象方法'onLoadFinish(OPEN)'。

这是什么意思?

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

首先,在我的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));
            }
}

1 个答案:

答案 0 :(得分:1)

  

这是什么意思?

正如它所说的那样。 ReaderListener要求您显示带有签名onLoadFinish()的{​​{1}}。

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