我想在登录页面中保存一个值,以后可以在其他片段中使用。为此,我使用了sharedPreferences并可以存储“用户名”,下面是代码:
Login.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");
}
}
});
另外,我可以使用以下代码在其他片段中使用sharedPreferences再次获取值:
EditPersonal.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”?
对方法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的变量,其中一个是全局变量,另一个是Local变量,只需确保是否为true,否则,请向我显示类EditPersonal.java的完整代码
关于java - 在Android中通过sharedPreferences在类之间传递值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34436301/