Android共享偏好错误,同时执行AsyncTask?

时间:2015-01-09 11:57:09

标签: android android-asynctask sharedpreferences

我正在成功存储值并检索但是当我使用这样的条件时

String checkpassword = "";
GlobalData GD = new GlobalData(getApplicationContext());
checkpassword = this.getpassword(GD);
if (checkpassword.equalsequalsIgnoreCase("") || checkpassword  == null
                || checkpassword.equalsIgnoreCase("null")){
   ShowCustomPopup();
}

Popup出现即使我在共享首选项内有字符串而不是在所有Android设备中但在4.4.4设备中这种情况经常发生有任何解决方案,完整的方法在下面谢谢 注意:调试应用程序时,它没有问题。

这是我存储值的方法

public void setpassword(GlobalData GD){
String password = "password";
GD.SetPassword(password);
GD.CommitUpdate;
}

这是我获取价值的方法

public String getpassword(GlobalData GD){
return GD.GetPassword();
}

这是我存储值和提交的类

public class GlobalData {

    SharedPreferences prefs = null;
    SharedPreferences SetPrefsObj = null;
    Editor editor;

    public GlobalData(Context ctx)
    {
    prefs = Prefs.get(ctx);
    SetPrefsObj = SetPrefs.get(ctx);
    editor = SetPrefsObj.edit();
    }

    public String GetPassword() 
    { 
      return this.prefs.getString("password",""); 
    }

    public void SetPassword(String Str_Value){ 
      editor.putString("password",Str_Value); 
    }

    public void CommitUpdate(){
        editor.commit();
    }

2 个答案:

答案 0 :(得分:1)

if (checkpassword  == null && ("".equalsequalsIgnoreCase(checkpassword)  
                || "null".equalsIgnoreCase(checkpassword))){
   ShowCustomPopup();
}

使用上面的语句它适用于所有设备。你将checkpassword == null作为第二个语句检查,它不好,因为对象检查总是应该先打开,然后才需要做另一件事。

答案 1 :(得分:0)

GetTask是我的AsyncTask,它是在执行AsyncTask时执行的,用密码弹出检查从共享首选项中获取值(我也是从同一个首选项集中检查密码),我不确定这个但是它可能是个问题访问相同的偏好可能会在android

中出现这样的问题

之前我正在进行密码检查以及AsyncTask现在我在执行任务之前检查它。

String checkpassword = "";
GlobalData GD = new GlobalData(getApplicationContext());
checkpassword = this.getpassword(GD);
if (checkpassword.equalsequalsIgnoreCase("") || checkpassword  == null
                || checkpassword.equalsIgnoreCase("null")){
   ShowCustomPopup();
}

new GetTask(this, this, null).execute();

class GetTask extends AsyncTask<Object, Void, String>
    {
        Context context;
        Activity actvity;

        GetTask(Context context, Activity act, String userid) {
            this.context = context;
            actvity = act;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            imgSpinner.setVisibility(View.VISIBLE);
            imgSpinner.startAnimation(animRotate);
        }

        @Override
        protected String doInBackground(Object... params) {

            runOnUiThread(new Runnable() {

                @Override
                public void run() {

                    tv_text1.setText(GD.GetLastID);
                    tv_text2.setText(PD.GetLatestID);

                }
            });

            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            imgSpinner.setVisibility(View.GONE);
            imgSpinner.clearAnimation();
        }
    }

我不确定,但在AsyncTask修复问题之前检查密码弹出..

注意:我也在阅读AsyncTask中的另一个偏好数据