0

初心者で申し訳ありませんが、私はどこでも見ましたが、わかりません。

Asynctask には 3 つのパラメーターが必要です。例えば

しかし、これらのパラメータのポイントは何ですか?

別のスレッドでジオコーダーを実行しようとしていますが、これがあります

private class GetCurrentCity extends AsyncTask<String, Void, Void>{

しかし、私は文字通りそれらのパラメータを作りました。そこに何を入れたらいいのかわからない。doInBackground() に既にあるコード行を除いて、進行状況バーや他のスレッドに転送する必要はありません。次に、そこから文字列を返す必要があり、そのために onPostExecute(String returnedAddress) を使用しています。

私は混乱しています。助けてください!

4

3 に答える 3

2

AsyncTaskのドキュメントから

非同期タスクで使用される 3 つのタイプは次のとおりです。

  • Params、実行時にタスクに送信されるパラメーターの型。
  • Progress、バックグラウンド計算中に発行された進行状況単位のタイプ。
  • Result、バックグラウンド計算の結果の型

すべての型が常に非同期タスクで使用されるわけではありません。タイプを未使用としてマークするには、単にタイプ Void を使用します。

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }
于 2013-07-10T15:54:10.393 に答える
0

API リファレンスではなく、もう少し詳しく説明します。まず、多くの人が AsyncTask インラインを匿名クラスとして使用します。心に留めておきます。独自のクラスで拡張したように見えますが (まったく問題ありません)、コンストラクターで必要なデータを渡し、それをクラス変数として参照していることを意味している可能性があります。その場合、一部の引数はあまり意味をなしません。

AsyncTask の匿名インライン クラスを想像してみてください。最初に行うことは、バックグラウンドで何らかの処理を実行することです。そのためには、データを doInBackground メソッドに渡す方法が必要です (コンストラクターを呼び出してデータを渡す必要がないため)。したがって、最初の引数は、渡すデータのタイプです。何も渡す必要がない場合は、Void を使用するか、Object を使用するか、またはまったく何かを使用します。これは、メソッド シグネチャの一部である必要がありますが、とにかく無視するためです。

多くの場合、進行状況の更新を提供したいと思うでしょう。たとえば、Float 型を使用して完了率を表したり、Long 型を使用してファイルから読み取ったバイト数を表したり、String 型を使用してユーザーへの一般的なメッセージを表すことができます。進行状況タイプを使用して、暫定的な進行状況情報を渡します (ファイルを facebook にアップロードするか、ファイルをダウンロードすると、進行状況で通知ステータスが更新されます。これは、どこでどのように行うかです)。あなたの場合は気にしないと言ったので、 Void を使用し、プログレスメソッドをわざわざ実装しないでください。

最後に、タスクが完了したら、onPostExecute で結果を取得する必要があります。したがって、doInBackground は (このタイプの) 値を返し、AsyncTask フレームワークはそれを onPostExecute に渡します。繰り返しますが、これは、それ以上の本体を持たない匿名クラスの場合により理にかなっています。クラスメンバーに何らかの結果を保持する場合、それも問題ありません (ただし不要です)。完了時に何もする必要がない場合、またはデータを渡す必要がない場合は、Void を使用します (そして doInBackground から null を返します)。少なくとも「正常に完了したか失敗したか」のブール値を返すと便利だと思います。そのため、その情報が得られます(タスク完了の通知は一般的な onPostExecute 操作であるため、成功または失敗の通知を投稿するかどうかに影響を与える可能性があります)。

例を使った説明が役立つことを願っています。

于 2013-07-10T16:18:27.473 に答える