简体   繁体   English

在Java中将布尔值作为参数传递

[英]Pass boolean as param in Java

I have two classes in my main android app's class file. 我的主要android应用程序的类文件中有两个类。 It's main activity and AsyncTask. 它是主要活动和AsyncTask。 I'm passing username and password strings when calling AsyncTask, but I want to pass an boolean from main activity together with strings. 我在调用AsyncTask时传递用户名和密码字符串,但是我想将主活动中的布尔值与字符串一起传递。 I'll explain it in code below (please check comments in code): 我将在下面的代码中对此进行解释(请检查代码中的注释):

//I have an main class
public class MyActivity extends Activity {

    boolean clicked = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //stuff

    login = (Button) findViewById(R.id.button1);
    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button1:
                    //DO something
                    clicked = true;
                    AsyncTaskRunner runner = new AsyncTaskRunner();
                    runner.execute(getUsername(), getPassword()); //Here I want to pass boolean clicked, which will be checked on asynctask!
                    break;
            }
        }
    });
}

private class AsyncTaskRunner extends AsyncTask<String, String, String> {
        if clicked == true{
        //do something
        }else{
        //do something        
    }
  }
}

This is probably not so complicated question to someone who works with Java often, I don't so that's why I'm asking... 对于经常使用Java的人来说,这可能不是那么复杂的问题,我不是,这就是为什么我要问...

Thanks in advance! 提前致谢!

  1. AsyncTaskRunner is Non-static Inner class of MyActivity class so You Already have access to 'clicked' field of Activity in any AsyncTaskRunner instance methods. AsyncTaskRunner是MyActivity类的非静态内部类,因此您已经可以在任何AsyncTaskRunner实例方法中访问Activity的“ clicked”字段。 You don't need to do anything in order to be able to see 'clicked' field in AsyncTaskRunner methods. 您无需执行任何操作即可看到AsyncTaskRunner方法中的“ clicked”字段。

  2. If you declare AsyncTaskRunner is Static class. 如果声明AsyncTaskRunner为静态类。 Here is the code: 这是代码:

     private static class AsyncTaskRunner extends AsyncTask<String, String, String> { private final boolean clicked; //private final Object anotherParams; public AsyncTaskRunner(boolean clicked ) { this.clicked = clicked; } public boolean isClicked() { return clicked; } @Override protected String doInBackground(String... strings) { } } 
  3. Use AsyncTaskRunner 使用AsyncTaskRunner

     AsyncTaskRunner runner = new AsyncTaskRunner(MyActivity.this.clicked); 

为您的AsyncTaskRunner类创建一个构造函数,并将您的参数传递给构造函数,然后在AsyncTaskRunner类方法中使用它们。

You can pass it as one of the strings in the array: 您可以将其作为数组中的字符串之一传递:

runner.execute(String.valueOf(clicked), getUsername(), getPassword());

And the AsyncTask will fetch it: 然后AsyncTask将获取它:

private class AsyncTaskRunner extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... strings) {
        boolean clicked = Boolean.parseBoolean(strings[0]);
        String user = strings[1];
        String pass = strings[2];
        ...
    }
}

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

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