我正在收到API的回复,我想更新个人资料。当我单击更新配置文件时。因此,更新的数据不会显示在文本框中。因为我从共享首选项中获取数据。获取数据后,我想在文本字段中显示更新的数据。 因此,我正在尝试实时更新共享首选项。 我可以使用清晰的模型数据解决此问题吗?以及如何?
public class EditProfile extends Fragment implements Consumes {
@Inject
ViewModelFactorys viewModelFactorys;
Profileviewmodel profileviewmodel;
EditText TVname;
EditText TVemail;
EditText TVmobile;
TextView tvname;
TextView tvemail;
TextView tvdepartment;
Button update;
private Loginmodel loginmodel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_edit_profile, container, false);
loginmodel = new Gson().fromJson(SharedPref.Getloggeduserdetials(SharedPref.LOGGOEDUSERDATABASE,""), Loginmodel.class);
Log.d("Login Data", loginmodel.toString());
profileviewmodel = ViewModelProviders.of(getActivity(), viewModelFactorys).get(Profileviewmodel.class);
profileviewmodel.apiResponse().observe(this, this::consumeResponsess);
update = rootView.findViewById(R.id.update);
TVname = (EditText)rootView.findViewById(R.id.TVname);
TVemail = (EditText)rootView.findViewById(R.id.TVemail);
TVmobile = (EditText)rootView.findViewById(R.id.TVmobile);
tvname = rootView.findViewById(R.id.tv_name);
tvemail = rootView.findViewById(R.id.tv_email);
tvdepartment = rootView.findViewById(R.id.tv_type);
TVname.setText(loginmodel.getName());
TVemail.setText(loginmodel.getEmail());
TVmobile.setText(loginmodel.getPhone());
tvname.setText(loginmodel.getName());
tvemail.setText(loginmodel.getPhone());
tvdepartment.setText(loginmodel.getDepartment());
update.setOnClickListener(view ->{
if (!TVname.getText().toString().isEmpty()) {
if (!TVemail.getText().toString().isEmpty()) {
Utility.showProgressdialog(getContext(), "");
Log.d("user name",TVname.getText().toString());
profileviewmodel.updateprofile(TVname.getText().toString().trim(),TVemail.getText().toString().trim(),SharedPref.Gettoken(SharedPref.TOKEN,""),getActivity());
} else
Snackbar.make(view, "Please enter Name", Snackbar.LENGTH_LONG).show();
} else
Snackbar.make(view, "Please enter email address.", Snackbar.LENGTH_LONG).show();
});
return rootView;
}
@Override
public void handleresponse(ApiResponse apiResponse) {
if (apiResponse.data.getSuccess().equalsIgnoreCase("1")){
if (apiResponse.data.getData() instanceof Loginmodel) {
loginmodel = (Loginmodel) apiResponse.data.getData();
SharedPref.Saveloggeduserdetails(SharedPref.LOGGOEDUSERDATABASE, new Gson().toJson(loginmodel));
}
}
}}
public static void Saveloggeduserdetails(String key, String value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putString(key, value);
prefsEditor.commit();
}
答案 0 :(得分:0)
这样做或您必须使用livedata
并在活动中观察它
@Override
public void handleresponse(ApiResponse apiResponse) {
if (apiResponse.data.getSuccess().equalsIgnoreCase("1")){
if (apiResponse.data.getData() instanceof Loginmodel) {
loginmodel = (Loginmodel) apiResponse.data.getData();
TVname.setText(loginmodel.getName());
TVemail.setText(loginmodel.getEmail());
TVmobile.setText(loginmodel.getPhone());
tvname.setText(loginmodel.getName());
tvemail.setText(loginmodel.getPhone());
tvdepartment.setText(loginmodel.getDepartment());
SharedPref.Saveloggeduserdetails(SharedPref.LOGGOEDUSERDATABASE, new Gson().toJson(loginmodel));
}
}
}}
答案 1 :(得分:0)
将设置的文本方法放在一个单独的方法中,而不是像这样的onCreateView:
private void updateScreen() {
TVname.setText(loginmodel.getName());
TVemail.setText(loginmodel.getEmail());
TVmobile.setText(loginmodel.getPhone());
tvname.setText(loginmodel.getName());
tvemail.setText(loginmodel.getPhone());
tvdepartment.setText(loginmodel.getDepartment());
}
然后,当您更新共享的首选项时,调用该方法:
public static void Saveloggeduserdetails(String key, String value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putString(key, value);
prefsEditor.commit();
updateScreen();
}
答案 2 :(得分:0)
可能有多种发生方式。您还没有提供完全如何存储共享首选项的完整代码。例如,“ prefsEditor”可能不正确。取决于您每次访问它的方式。这是一些我用来存储/检索共享首选项的示例代码:
public void setLoginData (String username, String password) {
SharedPreferences sharedPrefs = getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString(PREF_FILE_USERNAME_EXT, username);
editor.putString(PREF_FILE_PASSWORD_EXT, password);
editor.apply();
}
然后
public String getUsername() {
return getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE)
.getString(PREF_FILE_USERNAME_EXT, "");
}
(另外请注意,如果您使用的是单例,请小心,因为操作系统实际上可能会在您不知情的情况下删除单例的值。对于共享首选项,至少现在至少要像上面一样访问它,以便首先确定是否您的共享首选项正常工作。)
另一个问题可能是您的JSON不正确或不起作用。保存到共享实例之前,请执行一条打印线,以确保您确实在保存内容。 Log.d(“ Login Data”,loginmodel.toString())是什么?打印出您的代码?正确吗?