[Android] HttpURLConnection GET で画像をダウンロードする

ネットにHTTPアクセスしてデーターをダウンロードするためには、非同期のAsyncTaskを使い、HttpURLConnectionにて画像を落とします。
 
http url connection get 01 - [Android] HttpURLConnection GET で画像をダウンロードする

Android Studio 3.4.1
Android 9.0



HttpURLConnection

 
WebサーバとWebクライアント間でデータ送受信を行うために用いられるプロトコル(規約)をHTTPと言います。データの送受信にはGETとPOSTのメソッドがあり用途により使い分けます。
 
非同期など面倒な処理が必要なのですが、実はPicassoといライブラリーを使うと画像のダウンロードは簡単にできてしまいます。

ImgeViewで画面に表示させるときに、元画像のサイズ(縦横)が大きいと表示しきれない事があります。このPicassoを使うと簡単に表示で...

 

 

POST & GET

 
基本的には、両方とも送受信が可能
例えばGETでは画像が欲しいというリクエストを送信して画像データを受信する。POSTではデータベースの情報をサーバーに保存するために大量のデータを送るなど。以下は両者のザックリとした相違点

  • GET
    • サーバから情報を取得するケースに有効
    • データを送信できるのはテキストのみで少量しか送れない
    • https://www.google.co.jp/search?q=http+get&oq=http+get&aqs….のようにURLに付加して送信する
  • POST
    • サーバへ情報を登録するケース
    • バイナリーデータの送信
    • GETでのデータ送信限度を超えてしまう場合
    • 送信データをBODY部分に含めて送信できるので制限はない

今回はこのGETのメソッドを使って、サーバーから画像を受け取るケースを考えてみます。
 
Android6.0からApacheのHTTP Clientが基本的に使えなくなりました。
Apache HTTP Client の削除

 

AsyncTask

 
何も考えずにネットにアクセスしてデーターをダウンロードしようとすると例外が出ます。
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1114)

非同期でアクセスしないといけません。
これは Android 3.0より前のバージョンではなかったのですが 3.0 以降で、メインスレッドでネットワーク処理を行うとエラーとなるように変わったようです。
 
非同期処理AsyncTaskの使い方はこちらを参照してください。

asynctask 00 100x100 - [Android] HttpURLConnection GET で画像をダウンロードする
非同期処理が必要なケースは、メインスレッドでアプリがUIを表示させたり、ユーザーが入力したりしている裏でいろいろと処理をして欲しい場合で...

また付随してカスタムListenerも実装します。

custom listener 00 100x100 - [Android] HttpURLConnection GET で画像をダウンロードする
カスタムでイベント変更・終了を独自のlistenerを使って通知させることができます。  

 
AsyncTask<Params, Progress, Result>を継承したクラスを作ります。

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

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

 

サンプルコード

 
Listenerを使って作成しました。
 
MainActivity.java

 
AsyncTaskを実行するクラスです
DownloadTask.java

 
activity_main.xml

 
リソースです
strings.xml

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

 

サンプル動画

 
サンプル画像をサーバーに置いてダウンロードさせてみます。
お好みの画像が無ければこれでも落としてみてください
https://developer.android.com/images/home/android-p-clear-bg-with-shadow.png?hl=JA
 

 
エラーというかこのようなログで画像を落とせない場合はSSL通信ではないからです

 
 
関連ページ:

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加




アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

  • このエントリーをはてなブックマークに追加

フォローする