1

まず第一に、私はSOに関する同様の質問がいくつかあることを知っていると言いたいのですが、それらのどれも私の質問に答えていません...

まず、私のコードをお見せしましょう:

ロード時にリクエストをサーバーに送信し、サーバーが返すJSONを解析してから、解析されたJSONをオブジェクトとして返すフラグメントがあります。

onCreateView メソッドでプログレス バーを初期化します。

bar = (ProgressBar) mainView.findViewById(R.id.progressBar);

次に、Asynctask 拡張クラスのインスタンスを作成します。

PolisotAsyncInfo task = new PolisotAsyncInfo();

次に、execute メソッドを呼び出し、その後 get 関数を呼び出します:"

task.execute(new PolisotAsyncParameter(ClientMainActivity.mToken,ClientMainActivity.mUserID));
Object o = task.get();

これは私が間違っていることだと思いますが、よくわかりません.doInBackroundが返すデータが必要なので、get()メソッドを使用する必要があります....

この時点で、コンパイラは onPreExecute メソッドに移動し、そこでバーを表示に設定します。

bar.setVisibility(View.VISIBLE);

doInBackround メソッドが実行され、関係のないすべての種類の処理が実行された後

そして、そこで onPostExecute メソッドが呼び出され、バーを GONE に設定します。

bar.setVisibility(View.GONE);

何か助けていただければ幸いです、私はここでちょっと迷っています...

ありがとう!!

4

1 に答える 1

2

あなたが疑ったように、この行はあなたの問題だと思います。

Object o = task.get();

get()をブロックしUI Threadます。ただし、正確なニーズと構成に応じて、データを取得するためのさまざまなオプションがあります。

  1. Activityからメソッドを呼び出しonPostExecute()て、データに対して何かを行うことができます。それを行う方法は、それが内部クラスであるかどうかによって異なります。であれば問題ありません。別のファイルの場合は、s コンストラクターへのActivity参照を渡し、それを使用してメソッドを呼び出すことができます。これらのSOの回答は、これを行う方法を示していますAsyncTaskActivity

  2. インターフェースを使用して、終了時にコールバックを作成することもできますAsyncTaskこのSOの回答は、これを行うことをカバーしています

于 2013-08-21T12:59:05.500 に答える