0

バックグラウンドでタスクを実行していて、そこから結果を返しています。結果は、非同期タスクが完了する前に返されるため、null になります。どうすれば解決できますか

public Result CallServer(String zObjectNameP, String zMethodNameP, String QueryStringP)
{
 aResultM=new Result();
MainAynscTask asyncTask = new MainAynscTask();
try
{
asyncTask.execute(zObjectNameP,zMethodNameP,QueryStringP);
}
catch(Exception ex)
{

}
return aResultM;
}
4

1 に答える 1

1

4 つのステップ 非同期タスクが実行されると、タスクは次の 4 つのステップを経ます。

  1. タスクが実行される前に UI スレッドで呼び出される onPreExecute()。このステップは、通常、タスクをセットアップするために使用されます。たとえば、ユーザー インターフェイスに進行状況バーを表示します。

  2. doInBackground(Params...) onPreExecute() が実行を終了した直後にバックグラウンド スレッドで呼び出されます。このステップは、時間がかかる可能性のあるバックグラウンド計算を実行するために使用されます。非同期タスクのパラメーターがこのステップに渡されます。計算の結果は、このステップによって返される必要があり、最後のステップに戻されます。このステップでは、publishProgress(Progress...) を使用して、進行状況の 1 つ以上のユニットを公開することもできます。これらの値は、UI スレッドの onProgressUpdate(Progress...) ステップで発行されます。

  3. onProgressUpdate(Progress...) は、publishProgress(Progress...) の呼び出し後に UI スレッドで呼び出されます。実行のタイミングは未定義です。このメソッドは、バックグラウンド計算がまだ実行されている間に、ユーザー インターフェイスに任意の形式の進行状況を表示するために使用されます。たとえば、進行状況バーをアニメーション化したり、テキスト フィールドにログを表示したりするために使用できます。

  4. onPostExecute(Result) は、バックグラウンドの計算が終了した後に UI スレッドで呼び出されます。バックグラウンド計算の結果は、パラメーターとしてこのステップに渡されます。

ハンドラーを使用する

あなたの活動で

mHandler = new Handler() { 
@Override public void handleMessage(Message msg) { 
  String s=(String)msg.obj;
  tv.setText("Result = "+s);

}
};    

onPostexecute で

protected void onPostExecute(String result)//result returned in doInbackground
{
pd.dismiss();
if(result != null)
 {
 Message msg=new Message();
 msg.obj=result.toString();
 mHandler.sendMessage(msg);
 }
}
于 2013-04-01T11:32:37.957 に答える