ボタンを押したらHTTPリクエストしてその結果をTextViewに表示するようにしたいのですが
doInBackgroundが実行されたあと、onPostExecuteが呼ばれません。
MainActivityのonClickからAsyncTaskのサブクラスのexecuteをよんでいるだけなのですが、、、
単に別スレッドでリクエスト投げて結果をコールバックで受け取れればよいだけのですが
AsyncTaskは使う必要はないのしょうか?
コードです
java
1 class RequestTask extends AsyncTask<Void, Void, String> { 2 @Override 3 protected void onPreExecute() { 4 } 5 @Override 6 protected String doInBackground(Void... arg0) { 7 return response_data; 8 } 9 @Override 10 protected void onPostExecute(String result) { 11 showResponseView(result); 12 } 13 } 14これをMainActivityのonClickからよんでるだけです 15 public void onClick(View v) { 16 if (v == null) { 17 return; 18 } 19 switch (v.getId()) { 20 case R.id.button: 21 new RequestTask().execute();
AsyncTask は非推奨になりましたが、使えることは使えるはずです。
onPostExecute が呼ばれない件は、ソースを貼ってくれないと分かりません。
> AsyncTaskは使う必要はないのしょうか
必要性を判断できるのはご本人だけです。
なるほど非推奨なのですね!ありがとうございます。
コードがご提示されましたが、大分省略されているようで、 doInBackground が終了しているのをどう確認されたのかも分かりません。
doInBackground が終了していること、そして onPostExecute が呼ばれていないことをどう確認されたのでしょうか。
デバッグでdoInBackgroundのreturnまで確認しました
onPostExecuteにブレークポイント貼っていたのですが呼ばれませんでした。
> onPostExecuteにブレークポイント貼っていたのですが呼ばれませんでした
つまり「 onPostExecute で止まらなかった」ので呼ばれていないと判断されたということでしょうか。
もちろん、textviewにテキストを設定するようなメソッド呼び出しもしていましたが何も反応なかったので
hoshi-takanori様
jimbe様
原因が判明しました。実は例外が発生していました。
大変申し訳ございません。
解決すればとりあえずは OK ですが、お時間ありましたら、どのようにブレークポイントを設定して実行した場合に、どこで例外が発生すると doInBackground の return まで行っても onPostExecute が呼ばれないのか、同じように onPostExecute が実行されないことで teratail を見に来るかもしれない後日の人の為に、情報を回答として載せて置いて頂けませんでしょうか。
回答2件
あなたの回答
tips
プレビュー