我从android中的sharedpreferences读取问题。数据存储在首选项文件中,我确定这是因为我使用logcat来记录数据,因为它在存储时立即将其读回,并且我使用吐司消息在我读回数据后显示数据来自偏好。但是,当我尝试从新活动再次读取数据时,它返回默认的空刺。当我存在应用程序并再次运行它时,它会读取先前存储的数据。这是我最初保存数据的代码,它还包含用于验证存储的数据是否已被回读的注释:
public void downloadMatchesAsync() {
brawtaAPIAdapter.runGetMatches(new Callback<JSONKeys>() {
@Override
public void success(JSONKeys jsonKeys, Response response) {
Log.d(ApplicationConstants.TAG, "blarg");
Success = jsonKeys.isSuccess();
message = jsonKeys.getErrorMessage().toString();
if(!message.isEmpty()){
Toast.makeText(MyApplication.getAppContext(), message, Toast.LENGTH_SHORT).show();
}
Gson gson = new Gson();
String jsonObject = gson.toJson(jsonKeys); //converts java object into json string'
Preferences.saveToPreferences(activity, ApplicationConstants.match_data, jsonObject);
//data =Preferences.readFromPreferences(activity, ApplicationConstants.match_data, "no data");
//Toast.makeText(MyApplication.getAppContext(), "In networkOperation" + data, Toast.LENGTH_LONG).show();
}
@Override
public void failure(RetrofitError error) {
}
}); // Call Async API
//return data;
}
在不同的活动中,我尝试读取以前写的数据:
jsonString = Preferences.readFromPreferences(MatchSelect.this, ApplicationConstants.match_data, "");
但代码只返回存储的数据,如果我存在应用程序并再次运行它。
这是我的偏好类:
public class Preferences {
private static final String PrefName = "net.brawtasports.brawtasportsgps";
public static void saveToPreferences(Context context, String key, String value) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PrefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.apply();
}
public static String readFromPreferences(Context context, String key, String defaultValue) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PrefName, Context.MODE_PRIVATE);
return sharedPreferences.getString(key, defaultValue);
}
}
问题是什么?
答案 0 :(得分:0)
apply()
是异步调用,因此不必立即存储数据。请尝试拨打.commit()
。