我在android中读取共享引用时遇到问题。数据存储在首选项文件中,我确信这一点,因为当我立即读回数据时,我使用了logcat来记录数据,并且在我从首选项读回数据后,我使用toast消息来显示数据。然而,当我尝试从一个新的活动中再次读取数据时,它会返回一个空字符串的默认值。当我存在这个应用程序并再次运行它时,它会读取以前存储的数据。这是我最初保存数据时的代码,它还包含我用来验证存储的数据是否被读回的注释:
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);
}
}
问题出在哪里?
apply()
是一个异步调用,因此不必立即存储数据。请尝试调用.commit()
。