在方法中获取 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()
中使用它。
所以我的应用程序中有一个 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 的 SimpleViewerSimpleDocumentReader 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()
中使用它。