[Android] HttpURLConnection GET 設定

何も考えずにネットにアクセスしてデーターをダウンロードすると例外がでます。非同期でアクセスしないといけません

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1114)

これは android 3.0より前のバージョンではなかったのですがAndroid 3.0 以降で、メインスレッドでネットワーク処理を行うとエラーとなるように変わったようです。

またAndroid6.0からAppcheのHTTP Clientが基本的に使えなくなりました。Apache HTTP Client Removal
ということを踏まえて、画像ファイルのURLを入力ボタンをタップすると画像をダウンロードするサンプルを作ってみます

httpclient_2
URLを入力
httpclient_3
画像をダウンロード

Android Studio 2.1
Android 6.0

 

sponsored link

HttpURLConnection

 
非同期でのアクセスにはAsyncTaskを使います
 

AsyncTask

 
AsyncTask<String, Integer, Bitmap> を継承したクラスを作っています。このジェネリックはそれぞれ
<Params、Progress、Result> を意味しています

  • Params: doInBackground() バックグラウンド処理の引数
  • Progress: 進捗度合いを表示したい時に使うパラメータ
  • Result: onPostExecute() 処理終了時に受け取る型

doInBackground(String… params)の
(String… params)は可変長引数といいます
呼出す側では任意の数の String を渡すことが可能

ここでは、非同期タスクを別クラスとした冗長的なやり方を少し変えてパラメータをfinalにして、AsyncTask<Void,Void,Void>とする方法をとってコードをすっきりさせます。

MainActivity.java

activity_main.java

マニフェストに INTERNET のパーミッションを入れるのを忘れずに
AndroidManifest.xml

httpclient_3
[モデル:みき]