我有一个带有编辑文本首选项的设置活动,它在共享首选项中保存一个IP地址字符串,然后我有一个广播接收器,其中AsyncTask调用服务。我想制作可自定义的url地址,但是当我调用时没有采用ip地址的当前值,但是当我重新启动我的应用程序时采取了正确的值。我怎么能解决这个问题。我只粘贴有用的代码。 提前致谢
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;
}
}
+++ edit +++ 我在MainActivity中调用broadcast,然后使用EditTextPreference:
将值保存在SP中 Intent alarmIntent = new Intent(getApplicationContext(), Broadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + 5000, 30 * 1000, pendingIntent);
答案 0 :(得分:0)
请在onReceive
中试试preferenze = context.getSharedPreferences(PERFERENCE_NAME,
Context.MODE_PRIVATE);
希望它会帮助你。
答案 1 :(得分:0)
这取决于您保存SharedPreferences的方式。使用apply()
方法将异步存储该值,因此它不会阻止当前的Thread。另一方面,commit()
会立即保存该值。这个可能您的案例中的问题(请在保存SharedPreferences的地方提供您的代码)。
请注意,SharedPreferences在不同的进程中无法正常工作!如果您使用不同的流程,我建议使用一些与之相关的机制(例如IPC,数据库,......)。
替换SharedPreferences的替代库是Tray。它使用Content Provider / Databases并具有类似的语法。您甚至可以从SharedPreferences导入现有数据。