从共享偏好中发出读取数据。在获取数据之前,我必须运行应用程序两次

时间:2015-07-13 20:42:50

标签: android sharedpreferences

我从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);

}

}

问题是什么?

1 个答案:

答案 0 :(得分:0)

apply()是异步调用,因此不必立即存储数据。请尝试拨打.commit()