Android 广播接收机不';无法读取共享首选项中的当前值
我有一个带有编辑文本首选项的设置活动,它在共享首选项中保存一个作为IP地址的字符串,然后我有一个广播接收器,其中AsyncTask调用服务。我想创建可自定义的url地址,但当我拨打电话时,ip地址的当前值不会被占用,但当我重新启动应用程序时,ip地址的当前值会被占用。我怎样才能解决这个问题。我只粘贴有用的代码。 提前谢谢Android 广播接收机不';无法读取共享首选项中的当前值,android,broadcastreceiver,sharedpreferences,Android,Broadcastreceiver,Sharedpreferences,我有一个带有编辑文本首选项的设置活动,它在共享首选项中保存一个作为IP地址的字符串,然后我有一个广播接收器,其中AsyncTask调用服务。我想创建可自定义的url地址,但当我拨打电话时,ip地址的当前值不会被占用,但当我重新启动应用程序时,ip地址的当前值会被占用。我怎样才能解决这个问题。我只粘贴有用的代码。 提前谢谢 public class Broadcast extends BroadcastReceiver { @Override public void onReceive(fin
public class Broadcast extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
preferences = PreferenceManager.getDefaultSharedPreferences(context);
new Call().execute();
}
private class Call extends AsyncTask<String, String, String> {
String ip;
@Override
protected String doInBackground(String... params) {
ip = preferences.getString("key","");
String result = RestFullConnection.postCall("http://" + ip + ":8080/app/api/bla/sync", params[0]);
return result;
}
}
请在onReceive中尝试此功能
preferenze = context.getSharedPreferences(PERFERENCE_NAME,
Context.MODE_PRIVATE);
希望它能帮助您。这取决于您如何保存共享引用。使用
apply()
方法将异步存储该值,从而不会阻塞当前线程<另一方面,代码>提交()会立即保存该值。这在您的情况下可能是一个问题(请在保存SharedReference的位置提供您的代码)
小心,SharedReference不能在不同的进程中正常工作!如果您使用的是不同的流程,我建议您使用一些与之配套的机制(例如IPC、数据库等)
替代SharedReferences的另一个库是。它使用内容提供者/数据库,并且具有类似的语法。您甚至可以从SharedReferences导入现有数据。何时何地触发广播?然后将代码发布到保存ip的位置。我编辑我的问题。正如我在问题中所写的,我不会以编程方式保存值,而是使用一个组件(edittextpreference)来为我保存值。它仍然存在声明的问题-iirc
edittextpreference
使用apply()
。现在我们已经了解了问题,哪种可能是解决方案?不要使用EditTextPreference。
preferenze = context.getSharedPreferences(PERFERENCE_NAME,
Context.MODE_PRIVATE);