そろそろ非同期処理の中で行う処理もまともなものにしていこう・・・。
HTTPリクエストを投げて、Webページのダウンロードやデータのポストを行うにはHttpClientを利用する・・・。
DefaultHttpClient | Android Developers | Android Developers
DefaultHttpClientは、Androidにおける標準的なHTTPクライアントクラス・・・。
(・・・ではあったのだが、Android6で廃止されたので今後の新しい環境では使えない・・・。)
まず、activity_main.xmlは、
edittext1は、URL入力用・・・。
button1で、HTTPリクエストを投げる・・・。
edittext2に、HTTPレスポンスボディであるWebページのHTMLが表示される・・・。
CustomAsyncTaskLoaderを追加・・・。
引数としてurlを受け取る非同期処理・・・。
DefaultHttpClientをnewで生成し、HttpClient型httpClientに格納・・・。
HttpGetの生成でurlを渡して、HttpGetなリクエストhttpGetReqを取得・・・。
それをhttpClient.executeに渡してHTTPリクエストを実行・・・。
HttpResponseなhttpResが返ってくるので、httpRes.getStatusLine().getStatusCode()でステータスコードを確認・・・。
HttpStatus.SC_OKなら、成功ということなので、ByteArrayOutputStream型のstreamを生成・・・。
httpRes.getEntity().writeTo()にstreamを渡して、レスポンスをバイト列として書き込んでもらう・・・。
最後にstream.toString()で文字列に変換したものをretに格納・・・。それを返す・・・。
MainActivityでは、
button1のonClick時に、Bundle型argsを用意し、edittext1の内容をString型urlに格納したら、args.putStringで"url"をキーとしてurlを渡す・・・。
getLoaderManager().initLoader()にargsを渡して非同期処理を実行・・・。
onCreateLoaderでは、urlを取り出して、CustomAsyncTaskLoaderに渡してる・・・。
onLoadFinishedで非同期処理が終了したので、結果のdataをedittext2にセット・・・。
インターネットアクセスするので、AndroidManifest.xmlに、
を追加・・・。
今回は実機で・・・。
最初はこんな感じ・・・。
URLを入力・・・。
Button1を押すと、
大量のHTMLが返ってくる・・・。