Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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
BroadcastReceiver中的Android SharedReferences值未更新_Android_Sharedpreferences_Android Broadcastreceiver - Fatal编程技术网

BroadcastReceiver中的Android SharedReferences值未更新

BroadcastReceiver中的Android SharedReferences值未更新,android,sharedpreferences,android-broadcastreceiver,Android,Sharedpreferences,Android Broadcastreceiver,我创建了一个名为ALARM的SharedReferences,其映射名为(“ALARM”,boolean),(“ALARM,boolean”)的布尔值在MainActivity中不时更改,并在BroadcastReceiver中接收 问题是:当我不时更改MainActivity中的值时,BroadcastReceiver只更改一次。我的代码怎么了 在下面的代码中,start()与按钮对齐,单击时,将boolean更改为true。我也可以在BroadcastReceiver中看到接收到的真实值。但

我创建了一个名为ALARM的SharedReferences,其映射名为(“ALARM”,boolean),(“ALARM,boolean”)的布尔值在MainActivity中不时更改,并在BroadcastReceiver中接收

问题是:当我不时更改MainActivity中的值时,BroadcastReceiver只更改一次。我的代码怎么了

在下面的代码中,start()与按钮对齐,单击时,将boolean更改为true。我也可以在BroadcastReceiver中看到接收到的真实值。但是,我单击了stop(),将MainActivity中的布尔值更改为false,但仍然可以在BroadcastReceiver中看到接收到的真值。

若我先单击stop(),那个么我总是在BroadcastReceiver中看到false值。(即使我多次单击start())

谢谢

主要活动:

public class MainActivity extends AppCompatActivity {
SharedPreferences ALARM;
SharedPreferences.Editor editorALARM;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ALARM = getSharedPreferences("ALARM", MODE_PRIVATE);
    editorALARM = ALARM.edit();

}

// start data service
public void start(View view) {
    editorALARM.putBoolean("alarm", true).apply();
    Log.e("start",""+ALARM.getBoolean("alarm", false));

    Intent intent = new Intent();
    intent.setAction("xxx.ALARM");
    sendBroadcast(intent);

}

// stop data service
public void stop(View view) {
    editorALARM.putBoolean("alarm", false).apply();
    Log.e("stop",""+ALARM.getBoolean("alarm", true));

    Intent intent = new Intent();
    intent.setAction("xxx.ALARM");
    sendBroadcast(intent);

}

}
广播接收机:

public class Receiver extends BroadcastReceiver {
SharedPreferences ALARM;

@Override
public void onReceive(Context context, Intent intent) {
    ALARM = context.getSharedPreferences("ALARM", Activity.MODE_PRIVATE);

    Log.e("actual",""+ALARM.getBoolean("alarm", false));

}
}
替换-

editorALARM.putBoolean("alarm", true).apply();
与-


将对您起作用

这是由于删除manifests.xml中的android:process=“:remote”所致。我得到了正确的布尔值。

apply()以异步方式工作,尝试commit(),而不是只是好奇地想知道,提到“:remote”如何影响SharedReferences的保存行为?在google之后,我认为它与w/:remote=工作线程和w/o=UI线程有关。谢谢!这完全有道理,因为SharedReference只能通过UI线程更新。但是,在UI以外的线程中,我希望app crash.crash会更好。不幸的是,在非UI线程上什么也没有发生。这可能会使调试工作更加复杂。
editorALARM.putBoolean("alarm", true).commit();