我正在尝试在我的asynctask中设置共享首选项,但它似乎无法正常工作。任何人都可以帮助我。我已经尝试过十亿件事了
按钮/ ASYNC代码:
button.setOnClickListener(new OnClickListener(){
private ProgressDialog cancelDialog = null;
int valid;
@Override
public void onClick(View arg0) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
valid = api.validateLogin(username.getText().toString(), password.getText().toString());
return null;
}
@Override
protected void onPreExecute() {
cancelDialog = new ProgressDialog(LoginActivity.this);
cancelDialog.setMessage("Validating Username & Password");
cancelDialog.show();
super.onPreExecute();
}
@Override
protected void onPostExecute(Void result){
cancelDialog.cancel();
if(valid == 2){
SharedPreferences savedSession = getApplicationContext().getSharedPreferences("xdaeaf", Activity.MODE_PRIVATE);
savedSession.edit().putString("username", username.getText().toString());
try {
String passtext = MCrypt.bytesToHex(mcrypt.encrypt(password.getText().toString()));
savedSession.edit().putString("password", ""+passtext);
savedSession.edit().commit();
} catch (Exception e) {
e.printStackTrace();
//TODO:
}
//TODO:
}else{
//TODO:
}
super.onPostExecute(result);
}
}.execute();
}
});
我的访问代码:
SharedPreferences savedSession = context.getSharedPreferences("xdaeaf", Activity.MODE_PRIVATE);
String username = savedSession.getString("username", "");
String password = savedSession.getString("password", "");
System.out.println("username:"+username+" password:"+password);
我检查了我是否将空变量传递给putSTring,但是它将值传递给它。它只是没有储蓄。当我重新运行访问代码时,它只打印出“用户名:密码:”。尝试重新访问时,这些值为空。
答案 0 :(得分:4)
savedSession.edit().putString("username", username.getText().toString());
每次调用edit()都会返回一个新的Editor实例。所以你得到一个实例,做出改变并不管它。然后你得到第二个并且在没有更改的情况下提交它,这导致首选项中没有值更改。
Editor editor = savedSession.edit();
editor.putString("username", username.getText().toString());
editor.putString("password", ""+passtext);
editor.commit();
答案 1 :(得分:1)
如果您每次都调用savedSession.edit()
,那么它会返回不同的对象,那么您必须在每个对象上调用commit
方法来保存值。
所以得到Editor
这样的一个实例
Editor editor = savedSession.edit();
然后使用此引用来保存值。
您的代码应为
Editor editor = savedSession.edit();
editor.putString("username", username.getText().toString());
String passtext = MCrypt.bytesToHex(mcrypt.encrypt(password.getText().toString()));
editor.putString("password", ""+passtext);
editor.commit();