Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从AsyncTask返回布尔值?_Java_Android_Android Asynctask - Fatal编程技术网

Java 如何从AsyncTask返回布尔值?

Java 如何从AsyncTask返回布尔值?,java,android,android-asynctask,Java,Android,Android Asynctask,我有一些编辑文本,用户输入ftp地址、用户名、密码、端口和testConnection按钮。如果成功建立连接,它将返回布尔值true boolean status = ftpConnect(_address, _username, _password,_port); ftpDisconnect(); if (status == true) { Toast.makeText(SiteManager.

我有一些编辑文本,用户输入ftp地址、用户名、密码、端口和testConnection按钮。如果成功建立连接,它将返回布尔值true

boolean status = ftpConnect(_address, _username, _password,_port);
                ftpDisconnect();

                if (status == true) {
                 Toast.makeText(SiteManager.this, "Connection Succesful",
                 Toast.LENGTH_LONG).show();
                 } else {
                 Toast.makeText(SiteManager.this,
                 "Connection Failed:" + status, Toast.LENGTH_LONG).show();

                 } 
我正在重新编写代码,以使用AsyncTasks执行各种ftp操作,但如果成功建立连接,如何传回布尔值

testConnection.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                _name = etSitename.getText().toString();
                _address = etAddress.getText().toString();
                _username = etUsername.getText().toString();
                _password = etPassword.getText().toString();
                _port = Integer.parseInt(etPort.getText().toString());

                AsyncConnectTask task = new AsyncConnectTask(SiteManager.this,
                        _address, _username, _password, _port);
                task.execute();
                // boolean status = ftpConnect(_address, _username, _password,
                // _port);
                // ftpDisconnect();

                // if (status == true) {
                // Toast.makeText(SiteManager.this, "Connection Succesful",
                // Toast.LENGTH_LONG).show();
                // savesite.setVisibility(0);
                // } else {
                // Toast.makeText(SiteManager.this,
                // "Connection Failed:" + status, Toast.LENGTH_LONG)
                // .show();

                // }
            }
        });
还有我的任务

public class AsyncConnectTask extends AsyncTask<Void, Void, Void> {
    private Context mContext;
    private FTPHelper ftpHelper = new FTPHelper();
    private String _address;
    private String _user;
    private String _pass;
    private int _port;
    ProgressDialog progressDialog;

    public AsyncConnectTask(Context context, String address, String user,
            String pass, int port) {
        mContext = context;
        _address = address;
        _user = user;
        _pass = pass;
        _port = port;
    }

    // declare other objects as per your need
    @Override
    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(mContext, "Please wait for ",
                "Process Description Text", true);

        // do initialization of required objects objects here
    };

    @Override
    protected Void doInBackground(Void... params) {

        boolean status = ftpHelper.ftpConnect(_address, _user, _pass, _port);
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        progressDialog.dismiss();
    };
}
公共类AsyncConnectTask扩展了AsyncTask{
私有上下文;
私有FTPHelper FTPHelper=新的FTPHelper();
私有字符串地址;
私有字符串用户;
私人字符串传递;
私人国际港口;
进行对话进行对话;
公共异步连接任务(上下文上下文、字符串地址、字符串用户、,
字符串传递,int端口){
mContext=上下文;
_地址=地址;
_用户=用户;
_通过=通过;
_端口=端口;
}
//根据需要声明其他对象
@凌驾
受保护的void onPreExecute(){
progressDialog=progressDialog.show(mContext,“请等待”,
“过程描述文本”,正确);
//在此处执行所需对象的初始化
};
@凌驾
受保护的Void doInBackground(Void…参数){
布尔状态=ftpHelper.ftpConnect(\u地址、\u用户、\u通行证、\u端口);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
progressDialog.disclose();
};
}
公共类AsyncConnectTask扩展了AsyncTask{
@凌驾
受保护的布尔doInBackground(Void…params){
....
返回true;/*或false*/
}
@凌驾
受保护的void onPostExecute(布尔结果){
//结果保存您从doInBackground返回的内容
}
}

像这样声明您的异步任务

public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean>
请记住,doInBackground返回的值由onPostExecute作为参数设置。因此,请在onPostExecute方法中使用此选项。您也可以使用此方法更新UI

公共接口MyInterface{
public interface MyInterface {
    public void myMethod(boolean result);
}

public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {

    private MyInterface mListener;


    public AsyncConnectTask(Context context, String address, String user,
        String pass, int port, MyInterface mListener) {
        mContext = context;
        _address = address;
        _user = user;
        _pass = pass;
        _port = port;
        this.mListener  = mListener;
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        ....
        return result;
   }


    @Override
    protected void onPostExecute(Boolean result) {
        if (mListener != null) 
            mListener.myMethod(result);
    }
}

AsyncConnectTask task = new AsyncConnectTask(SiteManager.this,
                        _address, _username, _password, _port,  new MyInterface() {
    @Override
    public void myMethod(boolean result) {
        if (result == true) {
            Toast.makeText(SiteManager.this, "Connection Succesful",
            Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(SiteManager.this, "Connection Failed:" + status, Toast.LENGTH_LONG).show();
        } 
    }
});

task.execute();
公共方法(布尔结果); } 公共类AsyncConnectTask扩展了AsyncTask{ 私用MyInterface mListener; 公共异步连接任务(上下文上下文、字符串地址、字符串用户、, 字符串传递、int端口、MyInterface mListener){ mContext=上下文; _地址=地址; _用户=用户; _通过=通过; _端口=端口; this.mListener=mListener; } @凌驾 受保护的布尔doInBackground(Void…params){ .... 返回结果; } @凌驾 受保护的void onPostExecute(布尔结果){ if(mListener!=null) mListener.myMethod(结果); } } AsyncConnectTask=新建AsyncConnectTask(SiteManager.this, _地址、用户名、密码、端口、新MyInterface(){ @凌驾 公共void myMethod(布尔结果){ 如果(结果==真){ Toast.makeText(SiteManager.this,“连接成功”, Toast.LENGTH_LONG).show(); }否则{ Toast.makeText(SiteManager.this,“连接失败:+状态,Toast.LENGTH_LONG.show(); } } }); task.execute();

如果从
onPostExecute
调用
myMethod
,其中的代码将在UI线程上运行。否则,您需要通过
处理程序发布Runnable

是否希望状态值返回UI线程?是的。有可能吗?谢谢!我得再等3分钟才能接受这个答案。感谢您的解释,我最终使用了您的答案,因为我非常喜欢这种方法。我更喜欢实现delagete模式,而不依赖于context@Blackbelt如果我是传递数组,而不是布尔值`myMethod(ArrayLisy result)`我将如何检查它?@Moudiz以同样的方式。只需根据要传递的对象类型更改
boolean
。例如
arraylistresults
byte[]result
@Override
protected Boolean doInBackground(Void... params) {

    boolean status = ftpHelper.ftpConnect(_address, _user, _pass, _port);
    return status;
}

@Override
protected void onPostExecute(Boolean result) {
    // use the result
    super.onPostExecute(result);
    progressDialog.dismiss();
};
public interface MyInterface {
    public void myMethod(boolean result);
}

public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> {

    private MyInterface mListener;


    public AsyncConnectTask(Context context, String address, String user,
        String pass, int port, MyInterface mListener) {
        mContext = context;
        _address = address;
        _user = user;
        _pass = pass;
        _port = port;
        this.mListener  = mListener;
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        ....
        return result;
   }


    @Override
    protected void onPostExecute(Boolean result) {
        if (mListener != null) 
            mListener.myMethod(result);
    }
}

AsyncConnectTask task = new AsyncConnectTask(SiteManager.this,
                        _address, _username, _password, _port,  new MyInterface() {
    @Override
    public void myMethod(boolean result) {
        if (result == true) {
            Toast.makeText(SiteManager.this, "Connection Succesful",
            Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(SiteManager.this, "Connection Failed:" + status, Toast.LENGTH_LONG).show();
        } 
    }
});

task.execute();