简体   繁体   English

如何将布尔值传递给Android Studio中的onPostExecute方法?

[英]How to pass boolean value into onPostExecute method in Android Studio ?

I have two separated file which is Login.java and LoginTask.java 我有两个分开的文件,分别是Login.javaLoginTask.java

My problem is I am trying to pass boolean value "checkFlag" into onPostExecute method . 我的问题是我试图将布尔值“ checkFlag”传递给onPostExecute方法

But the boolean value always null . 但是布尔值始终为null The code as below : 代码如下:

Login.java Login.java

public class Login extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{
    EditText etUsername, etPassword;
    String login_name, login_pass;
    CheckBox cbRemember;
    public static final String ID="ID";
    Boolean checkFlag;
    SharedPreferences pref;
    SharedPreferences.Editor editor;
    final String TAG = this.getClass().getName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        etUsername  =(EditText)findViewById(R.id.etUsername);
        etPassword  =(EditText)findViewById(R.id.etPassword);
        cbRemember  = (CheckBox)findViewById(R.id.cbRemember);
        cbRemember.setOnCheckedChangeListener(this);
        checkFlag   = cbRemember.isChecked();
        Log.d(TAG, "Check flag is : " + checkFlag);

        pref        = getSharedPreferences("login.conf", Context.MODE_PRIVATE);
        editor      = pref.edit();
    }
    public void userLogin (View view){
        login_name          = etUsername.getText().toString();
        login_pass          = etPassword.getText().toString();
        checkFlag           = cbRemember.isChecked();
        String login_url    = getString(R.string.login);
        String method       = "login";
        LoginTask loginTask = new LoginTask(this);
        loginTask.execute(method,login_url,login_name, login_pass, String.valueOf(checkFlag));
        Toast.makeText(getApplicationContext(), "Check flag value = " + checkFlag, Toast.LENGTH_SHORT).show();
        finish();
    }
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkFlag = isChecked;
        Log.d(TAG, "Check flag is : " + checkFlag);
    }
}

LoginTask.java LoginTask.java

public class LoginTask extends AsyncTask<String,Void,String>{
    public static final String NAME="NAME";
    public static final String ID="ID";
    private PrefManager pref;
    Context ctx;
    LoginTask(Context ctx){this.ctx=ctx;}
    @Override
    protected void onPreExecute(){super.onPreExecute();}
    @Override
    protected String doInBackground(String... params){}
    @Override
    protected void onProgressUpdate (Void... values){super.onProgressUpdate(values);}

    // I want to pass checkFlag boolean value into this method 
    @Override
    protected void onPostExecute (String result){
        String fail         = "Try Again";
        String login_name   = result.trim(); // display "try again" error
        String welcome      = "Welcome to E-Movement";
        pref                = new PrefManager(ctx);
        if(result.trim().equalsIgnoreCase(fail.trim())){
            pref.logout();
            Toast.makeText(ctx,"Login failed ! " + fail, Toast.LENGTH_LONG).show();
            Intent intent = new Intent(ctx, Login.class);
            ctx.startActivity(intent);
        }else{
            Toast.makeText(ctx, "Check flag is = " + checkFlag, Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(ctx, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            ctx.startActivity(intent);
            pref.createLoginSession(login_name);
        }}}
 new LoginTask(this);

Put all needed parameters as parameter in the constructor. 将所有需要的参数作为参数放入构造函数中。 As you do with the context already. 正如您对上下文所做的那样。

 new LoginTask(this, checkFlag);

Other parameters too. 其他参数也是如此。 Pretty messy how you do it now. 您现在的操作方式非常混乱。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM