我有活动和服务的应用程序,我需要在活动中保存一些值并在服务中检索。
我可以使用活动中的SharedPreferences保存值,但是,当我尝试检索BroadcastReceiver中的值时,它表示 getPreferences未定义服务。
如何在BroadcastReceiver中检索我的值?
答案 0 :(得分:10)
已编辑以反映原始问题从Service
到BroadcastReceiver
的更改。
而不是在getPreferences(int mode)
中使用Activity
...
getSharedPreferences(String name, int mode).
getPreferences(int mode)
方法是上述方法,只是将Activity
类名称作为name
参数传递。这意味着它应该只用于给定Activity
来存储自己的内部首选项,而不是需要对其他应用程序组件全局的首选项。
如果BroadcastReceiver
onReceive(...)
方法传递了Context
参数,那么您可以使用context.getSharePreferences(<some_name>, <mode>)
来获取SharedPreferences
保存的Activity
{1}}。
答案 1 :(得分:0)
public class AndroidWalkthroughApp4 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onResume() {
// get EditText object
EditText editText = (EditText)this.findViewById(R.id.edit_text);
// get preferences object
SharedPreferences prefs = this.getPreferences(MODE_PRIVATE);
// set text to our saved value
editText.setText(String.valueOf(prefs.getInt("chars", 0)));
// don't forget to do this, or your app will crash!
super.onResume();
}
@Override
public void onPause() {
// get EditText object
EditText editText = (EditText)this.findViewById(R.id.edit_text);
// get preferences object
SharedPreferences prefs = this.getPreferences(MODE_PRIVATE);
// create editor from preferences object
SharedPreferences.Editor editor = prefs.edit();
// save and write length of EditText
editor.putInt("chars", editText.getText().length());
editor.commit();
// don't forget this either!
super.onPause();
}
}