2011-08-17 4 views
1

デバイス認証を処理するために完全に動作するAsyncTaskを構築しましたが、唯一の原因は、Bundleをインスタンス化変数に戻してしまうことです。ここではAsyncTaskのインスタンスは、次のとおりです。AsyncTaskの結果をインスタンシエーション変数に戻す

Bundle taskResult = new AuthorizeDevice(this).execute(passToAuthroization).get(); 

私は、件名に、いくつかの文献を読み、ここにある念頭に置いたものとなるようonPostExecute()方法は、それとは何かを持っていることを発見しました:

protected void onPostExecute(Bundle result){ 
    dialog.dismiss(); 
    Toast.makeText(context, "background process finished: "+result.getString("UDID"), Toast.LENGTH_SHORT).show(); 
} 

どうすればそのバンドルをメインアクティビティに戻すことができますか?

+0

なぜバンドル。よく分かりません。 ** doInBackground **の**例外**を当てれば、** onPostExecute **のヌルを取得するでしょう。 – Samuel

+0

トーストは 'UDID'にアクセスしようとすると、デバッグのためだけです。私は例外を捕まえてバンドルに送るための事前定義された方法をレイアウトしました。私は問題をユーザーに知らせることができます。 – nkcmr

+0

check PravinCGの答え。彼は正しいです。待っているメカニズムを思いついたり、バンドルをonPostExecuteから何とか投げたりする必要があります。 – Samuel

答えて

1

resultでそれを初期化することができます

public interface AuthorisationCallback() { 
     void onFinish(Bundle bun); 
}; 

のように定義されたコールバックインタフェースは、このインタフェースを実装して、バンドルにやりたいことがあります。

AuthorisationCallback mAuthcallback = new AuthorisationCallback() { 
    void onFinish(Bundle bun) { 
     // Do what ever with the bundle. 
    } 
}; 

onPostexecute(でAsyncTask

new AuthorizeDevice(mAuthcallback).execute(passToAuthroization); 

への実装の参照を送る)行う

protected void onPostExecute(Bundle result){ 
    dialog.dismiss(); 
    mCallback.onFinish(result); 
} 
+0

okですが、どのようにしてonFinishから別のアクティビティにリダイレクトすることができますか、それをコンテキストに渡すことはできません。 – max4ever

2

AsyncTaskは非ブロッキング呼び出しであり、必要な方法でバンドルを取得することはできません。しかし、あなたができることは、AsyncTaskでインターフェースが作成され、いつ実行されるかがわかります。 onTaskCompleteのようなものがあり、そこに結果のバンドルを渡すことができます。

+0

+1私はインスタントパートを見逃しました。 yes AsyncTaskはノンブロッキングです。 – Samuel

0

ご覧のとおり、onPostExecute()メソッドの戻り値の型は無効です。それは何も返さない。これはおそらくあなたがBundle taskResultインスタンス変数を作成し、postExecute

1

まず、APIでよく見ます。

あなたは何をしようとしているのかを知るためにコードをもっと見る必要がありますが、PravinCGは正しいです。AsyncTask.execute()の呼び出し方法が間違っています。あなたは戻り値をしたい場合は、あなたがあなたの活動へのアクセスが必要な場合は、移動するための方法であるサブクラスAsyncTask<?,?,?>を開始しているように見えますonPostExecute()

からそれを得るには、単にAsyncTaskサブクラスを置くことができませんでしたあなたのアクティビティクラス?これにより、onPostExecute()内からアクティビティのメソッドにアクセスできます。これは、設計上、UIスレッドで発生します。 (もう一度、どれだけ実行可能かを知るためにはコードをもっと見る必要があり、そこに置くだけです)。 あなたのAsyncTaskサブクラスにアクティビティへの参照を渡し、パブリックメソッドを使用してonPostExecuteからバンドルを返すか、または提案されているようにInterfaceを使用してください。

関連する問題