我正在使用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);
}
问题是没有例外或根本没有崩溃,我无法弄清楚错误。
答案 0 :(得分:1)
可能是竞争条件。检查nom,prenom和那些字段的设置位置。 =)
答案 1 :(得分:0)
Json到字符串转换是一个耗时的过程。根据您的代码,共享首选项的更新位于json转换代码之下。在json转换之前有机会执行共享pref更新。
因此,更好的解决方案是,使用异步任务进行此转换并更新onPostExcecute()中的共享首选项。这可以解决您的问题。请试试。
参考链接:https://developer.android.com/reference/android/os/AsyncTask.html