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 サイトの他の関連記事を参照してください。