Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android BroadcastReceiver中未定义getPreferences(MODE_PRIVATE)_Android - Fatal编程技术网

Android BroadcastReceiver中未定义getPreferences(MODE_PRIVATE)

Android BroadcastReceiver中未定义getPreferences(MODE_PRIVATE),android,Android,我有一个带有活动和服务的应用程序,我需要在活动中保存一些值,并在服务中检索 我可以在活动中使用SharedReferences保存该值,但是,当我尝试在BroadcastReceiver中检索该值时,它会说getPreferences未定义服务。 我如何在BroadcastReceiver中检索我的值?编辑以反映原始问题从服务更改为BroadcastReceiver 不要在活动中使用getPreferences(int模式),而是使用 getSharedPreferences(String na

我有一个带有活动和服务的应用程序,我需要在活动中保存一些值,并在服务中检索

我可以在活动中使用SharedReferences保存该值,但是,当我尝试在BroadcastReceiver中检索该值时,它会说getPreferences未定义服务。


我如何在BroadcastReceiver中检索我的值?编辑以反映原始问题从
服务
更改为
BroadcastReceiver

不要在
活动中使用
getPreferences(int模式)
,而是使用

getSharedPreferences(String name, int mode).
getPreferences(int模式)
方法是上述方法的一种方便方法,只需将
活动
类名作为
名称
参数传递。这意味着它实际上应该只用于给定的
活动
,以存储其自身的内部首选项,而不是需要对其他应用程序组件进行全局设置的首选项


BroadcastReceiver
的情况下,
onReceive(…)
方法被传递一个
Context
参数,因此您可以使用
Context.getSharePreferences(,)
要获取
活动保存的
共享引用

,还可以让服务在绑定到活动时接收上下文对象。这样,您总是可以引用您的应用程序上下文。如果你有上下文,你就有共享引用。@RyanGray:但正如你所说,这取决于绑定到
服务的
活动
。如果由其他应用程序组件启动
服务
,则不会出现这种情况。显然,这取决于应用程序的设计/功能以及各个组件的功能。
getPreferences(int模式)
方法只是一个方便的方法,它调用
getSharedReferences(字符串名,int模式)
活动
类名作为
名称
参数传递,并暗示该类名只能由
活动
用于其自身的内部首选项,而不是应用程序的全局首选项。对不起,我只是编辑了一下,它是BroadcastReceiver,而不是Services。您的广播接收器在哪里?活动中的私人类?还是单独上课?
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();
    }
}