非同期タスクの結果を得るために多くの質問がありましたが、いずれも問題を解決しませんでした。私がしたいことは、MyClassオブジェクトの非同期タスク配列から取得してUIで使用することですが、異なる状況ではUIが異なります。ときには、私の配列でrecyclerviewを塗りつぶすことがあります。時には、配列で無限のタブ付きアクティビティを塗りつぶすこともあります。これは、onPostExecute()
で処理するために、私のUI要素をAsyncタスクに渡すことができないことを意味します。非同期タスクから得たい結果は、MyClassオブジェクトの配列であり、別の状況では別の方法で動作します。そして、一つ重要なことは、(それがまだ実行中だ場合、私はとUIを埋めるためにデータがないので)私はAsyncTaskの実行後に私のUIを埋めなければならないので、私は単純に最ものでasynctaskの結果を取得して処理する
MyClass[] result = new MyAsyncTask().execute().getResult()
MyUI.fillWith(result)
のようなものを書くことができないということですおそらく私はNPEを得るでしょう。
私の結果をMyClassオブジェクトの配列として取得し、その結果を取得した後でUIを埋め込むにはどうすればよいですか?(UIスレッドでは、asynctaskがすべての作業を行い、私のデータでUIを埋めることができます。もちろん、私はUIスレッドをブロックしたくありません)?
取り扱いUI onPostExecute()
で、前に書いた理由のために私の問題は解決しません。インターフェイスでAsyncTaskをカバーしても、私が必要とするもののように見えません。そして私はAsyncTaskのためのユニークなトークンを持つ解決策を見ましたが、私はそれがどのように動作するかを知りませんでした。
しかし、それは、それが動作するだけでどのようなので、あなたがonPostExecuteでUIスレッドを処理する必要があります。 AsyncTaskは使用しないでください。他のネットワーキングライブラリを考慮しましたか? –
そのトップアンサーは本質的にあなたの後ろのものです。レスポンスインターフェイスの 'String output'を' MyClass [] output'に置き換えて、 –
@ cricket_007と設定する必要があります。しかし、これは複雑な解決策のようです。それは私が理解するように、これは共通の問題であるので、それは奇妙です。 – Leopik