首页 >Java >java教程 >如何从 Android AsyncTask 返回布尔值?

如何从 Android AsyncTask 返回布尔值?

Patricia Arquette
Patricia Arquette原创
2024-12-14 19:15:18941浏览

How to Return Boolean Values from an Android AsyncTask?

从 AsyncTask 返回布尔值

AsyncTask 提供了一种在 Android 应用程序中执行后台操作的便捷方法。但是,当您需要将 AsyncTask 的结果传达给主线程时,例如返回布尔值,标准的 AsyncTask 完成方法可能就不够用了。

原始代码

考虑以下代码,其中 AsyncTask 用于建立 FTP连接:

AsyncConnectTask task = new AsyncConnectTask(SiteManager.this,
            _address, _username, _password, _port);
task.execute();

在此代码中,AsyncConnectTask 将在后台执行连接操作,并将结果作为布尔值返回。但是,没有机制可以在主线程中检索此布尔值。

自定义接口方法

要从 AsyncTask 返回布尔值,您可以创建一个将在创建 AsyncTask 的活动或片段中实现的自定义接口。例如:

public interface MyInterface {
    public void myMethod(boolean result);
}

修改的AsyncTask

然后可以修改AsyncTask来实现这个接口,并将结果通过接口:

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) {
        // ...
        this.mListener  = mListener;
    }

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

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

使用

使用自定义接口和修改的AsyncTask,可以在主线程中执行任务并接收布尔结果:

AsyncConnectTask task = new AsyncConnectTask(SiteManager.this,
            _address, _username, _password, _port,  new MyInterface() {
    @Override
    public void myMethod(boolean result) {
        if (result == true) {
            // Connection successful
        } else {
            // Connection failed
        } 
    }
});

task.execute();

通过使用这种方法,您可以从 AsyncTasks 返回布尔值并在 main 上处理结果线程。

以上是如何从 Android AsyncTask 返回布尔值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn