从共享引用读取数据时出现问题.在存储数据之前,我必须运行该应用程序两次



我在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()

相关内容

最新更新