Android Can';是否在AsyncTask中设置SharedReference?

Android Can';是否在AsyncTask中设置SharedReference?,android,android-asynctask,sharedpreferences,Android,Android Asynctask,Sharedpreferences,我正在尝试在asynctask中设置共享首选项,但它似乎不起作用。谁能帮我一下吗。我已经试过10亿次了 按钮/异步代码: button.setOnClickListener(new OnClickListener(){ private ProgressDialog cancelDialog = null; int valid; @Override public void onClick(View arg0) {

我正在尝试在asynctask中设置共享首选项,但它似乎不起作用。谁能帮我一下吗。我已经试过10亿次了

按钮/异步代码:

    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();    
        }
    });

我检查了是否将空变量传递给putSTring,但它将值传递给putSTring。这只是不节省。当我重新运行访问代码时,它只打印出“Username:password:”。尝试重新访问时,值为空。

如果每次调用
savedSession.edit()
时,它都会返回不同的对象,那么必须对每个对象调用
commit
方法来保存值

因此,像这样获取一个
编辑器的实例

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();

如果每次调用
savedSession.edit()
时都会返回不同的对象,那么必须对每个对象调用
commit
方法来保存值

因此,像这样获取一个
编辑器的实例

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();
每次调用edit()都会返回一个新的编辑器实例。因此,你得到一个实例,做一个改变,让它自己去做。然后,您将获得第二个参数,并在没有更改的情况下提交该参数,这不会导致首选项中的值更改

Editor editor = savedSession.edit();
editor.putString("username", username.getText().toString());
editor.putString("password", ""+passtext);
editor.commit();
每次调用edit()都会返回一个新的编辑器实例。因此,你得到一个实例,做一个改变,让它自己去做。然后,您将获得第二个参数,并在没有更改的情况下提交该参数,这不会导致首选项中的值更改

Editor editor = savedSession.edit();
editor.putString("username", username.getText().toString());
editor.putString("password", ""+passtext);
editor.commit();

你从不提交你的编辑器。在您提交编辑器之前,它不会被保存。只是想知道,这个“xdaeaf”SharedReferences是什么?你是想出这个名字的还是从别的地方用的?你从来没有提交过你的编辑器。在您提交编辑器之前,它不会被保存。只是想知道,这个“xdaeaf”SharedReferences是什么?这个名字是你想出来的还是你从别的地方用的?