ホームページ >Java >&#&チュートリアル >Android AsyncTask からブール値を適切に返す方法

Android AsyncTask からブール値を適切に返す方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-11 10:38:10702ブラウズ

How to Properly Return a Boolean Value from an Android AsyncTask?

AsyncTask からブール値を返す方法

Android プログラミングでは、AsyncTask は別のスレッドでバックグラウンド操作を実行するように設計されたクラスです。このコンテキストでは、非同期タスクは非同期で動作するため、そのタスクからブール値を返す必要があるときに問題が発生します。

FTP アドレス、ユーザー名、パスワードを表す EditText を備えたユーザー インターフェイスがあるシナリオを考えてみましょう。そして港。ユーザーが「testConnection」ボタンをクリックすると、接続が試行され、接続ステータスに基づいてブール値が返されます。

非同期タスクからブール値を返すチャレンジ

最初、コードは提供された例のように見えるかもしれません:

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();

 } 

ただし、 AsyncTask の場合、doInBackground 内のコードはバックグラウンドで実行され、バックグラウンド操作の結果に関係なく onPostExecute メソッドが呼び出されます。これは、ブール値ステータスが onPostExecute メソッドで使用できないことを意味します。

解決策: コールバック インターフェイスの実装

この課題を克服するには、コールバック インターフェイスを実装します。 。その方法は次のとおりです:

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();

このアプローチにより、doInBackground からの結果がコールバック インターフェイスを通じて UI スレッドに確実に渡されます。 onPostExecute から myMethod を呼び出して UI スレッドでコードを実行できます。それ以外の場合は、ハンドラーを通じて Runnable をポストする必要があります。

以上がAndroid AsyncTask からブール値を適切に返す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。