我想在登录页面中保存一个值,以便以后可以在其他 fragment 中使用。为此,我使用了sharedPreferences并可以存储“用户名”,这是代码:
登录.java
btnl.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// get The User name and Password
String userName=un.getText().toString();
String password=pa.getText().toString();
String PATIENTID="";
// fetch the Password form database for respective user name
String storedPassword=demoCRUD.getSingleEntry_Username(userName);
// check if the Stored password matches with Password entered by user
if(password.equals(storedPassword)) {
show("Welcome!");
SharedPreferences userDetails = getContext().getSharedPreferences("userdetails", Context.MODE_PRIVATE);
Editor edit = userDetails.edit();
edit.clear();
edit.putString("_user", userName.trim());
edit.apply();
Intent intentLogin=new Intent(getActivity(),Welcome.class);
startActivity(intentLogin);
}
else {
show("User Name or Password does not match");
}
}
});
此外,我可以使用以下代码在其他 fragment 中使用sharedPreferences再次获取该值:
编辑个人.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ep_demoCRUD = new DemographicsCRUD(getActivity());
SharedPreferences userDetails = getContext().getSharedPreferences("userdetails", Context.MODE_PRIVATE);
String puser = userDetails.getString("_user", "");
show("puser = " + puser); *SHOWS ME IT HAS A STRING INSIDE
}
还在“EditPersonal.java”中,我有这段代码调用不同类的方法:
protected Long doInBackground(Void... arg0) {
return ep_demoCRUD.UpdateDemographics(ep_demoId,puser);
}
问题是,当“EditPersonal.java”的 onCreate 方法运行时,“puser”的值等于 Login.java 中的用户名,但是一旦“doInBachground”调用方法“ep_demoCRUD.UpdateDemographics(ep_demoId) ,puser);”它传递 null! 我打印了日志,我明白了 puser=null。 我不明白有什么问题?为什么“null”已经具有值时还要传递?
p.s 方法 UpdateDemographics 定义如下:
public long UpdateDemographics(Demographics_to demoId,String us) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DataBaseHelper.lastName, demoId.getD_lastName());
values.put(DataBaseHelper.firstName, demoId.getD_firstName());
values.put(DataBaseHelper.dateOfBirth, demoId.getD_dateOfBirth());
Log.d("puser","=" +us); * NULL IS PRINTED IN LOG*
long result = database.update(dbHelper.Demographics_Table,values,"username = ?" , new String[]{us});
Log.d("Update Result:", "=" + result);
db.close();
return result;
}
提前谢谢您!
最佳答案
我认为您正在使用两个同名的变量 puser ,其中一个是全局的,另一个是本地的,,只需确定这是否正确,,如果不是,则显示类 EditPersonal.java 的完整代码
关于java - 在Android中通过sharedPreferences在类之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34436301/