DefaultHttpClient

そろそろ非同期処理の中で行う処理もまともなものにしていこう・・・。
HTTPリクエストを投げて、Webページのダウンロードやデータのポストを行うにはHttpClientを利用する・・・。

DefaultHttpClient | Android Developers | Android Developers

DefaultHttpClientは、Androidにおける標準的なHTTPクライアントクラス・・・。
(・・・ではあったのだが、Android6で廃止されたので今後の新しい環境では使えない・・・。)

まず、activity_main.xmlは、

edittext1は、URL入力用・・・。
button1で、HTTPリクエストを投げる・・・。
edittext2に、HTTPレスポンスボディであるWebページのHTMLが表示される・・・。

f:id:BG1:20161007060222p:plain

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に、

を追加・・・。

f:id:BG1:20161007063342p:plain

今回は実機で・・・。

f:id:BG1:20161007063404p:plain

最初はこんな感じ・・・。

f:id:BG1:20161007063424p:plain

URLを入力・・・。
Button1を押すと、

f:id:BG1:20161007063625p:plain

大量のHTMLが返ってくる・・・。

Sample/android/DefaultHttpClient/DefaultHttpClient/src/DefaultHttpClient at master · bg1bgst333/Sample · GitHub