我想在登录页面中保存一个值,以后可以在其他片段中使用。为此,我使用了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/

10-12 00:29
查看更多