私はasynctaskのonPostExecuteメソッドの結果の値を以前のアクティビティ、つまりayncタスクが実行されているアクティビティに送る必要があるアプリケーションを開発していますいくつかのコードを入力します。私があなただったらAsyncTask asynctask onpostexecuteメソッドの結果を親アクティビティに渡す方法android
を拡張するクラスのPARAMとして
- 宣言クラス:Anyhelpは
私はasynctaskのonPostExecuteメソッドの結果の値を以前のアクティビティ、つまりayncタスクが実行されているアクティビティに送る必要があるアプリケーションを開発していますいくつかのコードを入力します。私があなただったらAsyncTask asynctask onpostexecuteメソッドの結果を親アクティビティに渡す方法android
を拡張するクラスのPARAMとして
二つの方法を高く評価しています、私は最初のオプションに従います。 DOCSで
ルック:機能onPostExecute
の体内に配置された
class MyActivitySubclass extends Activity {
function runOnPostExecute(){
// whatever
}
private class MyTask extends AsyncTask<Void, Void, Void> {
void doInBackground(Void... params){
// do your background stuff
}
void onPostExecute(Void... result){
runOnPostExecute();
}
}
}
注1
コードは、すでに活動スレッドで実行され、あなたはthis
キーワードはMyTask.this
につながることだけ言及する必要がありますそうでない場合MyActivitySubclass.this
メインのUIスレッドでonPostExecuteメソッドが起動されるため、そこで行われた処理はすべてAsyncTasks呼び出し元に既に存在します。まあ
http://developer.android.com/reference/android/os/AsyncTask.html
あなたのAsyncTaskは内部クラスであれば、あなたは単にonPostExecute()
から、あなたの活動のメソッドを呼び出すことができます。
public class MyActivity extends Activity {
public void someMethod(String someParam) {
// do something with string here
}
public class InnerTask extends AsyncTask<...> {
protected void onPostExecute(result) {
someMethod(Send parameters);
}
}
}
火OnPostExecuteでイベントを。
これは、Marek Seberaの回答に追加され、ハンドラを使用するように指摘されています。コードをシンプルで直観的に保つには、インターフェイスを使用します。これはエイリアンの概念ではなく、コールバック関数(OnClickListnerなど)のために常に使用します。コードはこのようなものに見えます。
public class InnerTask extends AsyncTask<...>
{
interface ResultHandler
{
void gotResult(<> result);
}
private ResultHandler myResult;
//constructor
public InnerTask(....params...,ResultHandler callback)
{
...
this.myResult = callback;
}
protected void onPostExecute(<>result)
{
...
myResult.gotResult(result);
}
}
public class MyActivity extends Activity implements InnerTask.ResultHandler
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
//do something
//if you want the InnerTask to execute here
InnerTask i = new InnerTask(....params...,this); //send 'this' as parameter
i.execute();
}
@Override
public void gotResult(<> result)
{
//from onPostExecute
}
}
我々は複数のサイトで同じAsynTaskクラスを使用したい場合は、我々はこのタイプの実装を使用する代わりに、ネストされたクラスの実装を使用することができます。
OPの問題は明らかに別ファイルでパブリッククラスとして宣言されたAsyncTaskサブクラスです。彼はすでに 'onPostExecute'が何のために使われているかを知っています –