对象未保存在共享首选项

时间:2017-06-28 15:24:51

标签: android sharedpreferences gson

我正在使用restofit2.0的rest来处理android项目中对象的更新细节。在我调用编辑方法之后,我得到了一个肯定的响应,我的更改正在被保存,但在保存它的共享偏好并尝试从中获取它时,我得到旧的未更改数据并在数据库中检查旧数据(休息服务工作很好我用邮差测试了。

这是我的代码:

           public void editUser(){
    user.setNom(nom);
    user.setPrenom(prenom);
    user.setAdresse(adresse);
    user.setTel(telephone);
    apiService = RestService.createService(SolarAPIService.class);
    Call<String> call = apiService.editUser(nom,prenom,adresse,telephone,user.getIdUser());
    call.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            if(response.body().isEmpty()){
                Snackbar.make(layout, "OOps modification non autorisée !", Snackbar.LENGTH_LONG).show();
            }else{
                save(user);

            }
        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {
            Snackbar.make(layout, "OOps!!!!!", Snackbar.LENGTH_LONG).show();
        }
    });

}

这是调用编辑的地方

              valider.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                editUser();

            phoneView.setText(""+user.getTel());
            adrView.setText(user.getAdresse());
            nomV.setText(user.getNom()+" "+user.getPrenom());
            mailV.setText(user.getLogin());
            getUserShrdPref();
            Snackbar.make(layout, "Changement effectué avec sucess !!"+user.getAdresse(), Snackbar.LENGTH_LONG).show();


        }
    });

这就是save和getSharedPrefernces

         public void save(User user) {
    mPrefs = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = mPrefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(user);
    prefsEditor.putString("user", json);
    prefsEditor.commit();
}

     public void getUserShrdPref() {
    Gson gson = new Gson();
    String json = mPrefs.getString("user", "");
    user = gson.fromJson(json, User.class);
}

问题是没有例外或根本没有崩溃,我无法弄清楚错误。

2 个答案:

答案 0 :(得分:1)

可能是竞争条件。检查nom,prenom和那些字段的设置位置。 =)

答案 1 :(得分:0)

Json到字符串转换是一个耗时的过程。根据您的代码,共享首选项的更新位于json转换代码之下。在json转换之前有机会执行共享pref更新。

因此,更好的解决方案是,使用异步任务进行此转换并更新onPostExcecute()中的共享首选项。这可以解决您的问题。请试试。

参考链接:https://developer.android.com/reference/android/os/AsyncTask.html