SQLの窓

2017年09月09日


OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート

▼ HttpAccess パッケージのダウンロード


( 解凍して、main\java フォルダの中に コピーして下さい )
※ OkHttp より 最新の Gradle の記述を取得して build.gradle の dependencies の最後に貼り付けて下さい
例) compile 'com.squareup.okhttp3:okhttp:3.8.1'

処理概要

ボタンをクリックした後、HttpAccess クラスでファイルをダウンロードする download メソッドを実行するテンプレートです。サンプルでは画像を使用して、ダウンロードした後に ImageView に表示していますが、ダウンロード処理だけならば、どのようなファイルでもかまいません。

ここでは、パッケージ内に保存していますが、OutputStream を引き渡すので、他の保存場所でも問題はありません。

※ onAsyncTaskListener の引数の文字列は、http のステータスコードなので、通常は 200 が返ります。インターネットのアクセスそのものが成功すれば、null 以外が返ります。

MainActivity
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.lightbox.web.HttpAccess;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class MainActivity extends AppCompatActivity {

	private HttpAccess httpAccess;
	private ImageView imageView;
	private String image_url;
	private OutputStream outputStream;

	private Bitmap bitmap;
	private BitmapFactory.Options options;

	private InputStream inputStream;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// ダウンロードでは、URL をメソッドで指定します
		httpAccess = new HttpAccess("");
		imageView = (ImageView) MainActivity.this.findViewById(R.id.imageView);
		image_url = "https://lightbox.sakura.ne.jp/demo/image/sample.jpg";

		// ボタンをクリック
		MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				try {

					// 保存ファイル
					outputStream = MainActivity.this.openFileOutput("save.jpg", MODE_PRIVATE);
					// ダウンロード
					httpAccess.download(image_url,outputStream, new HttpAccess.OnAsyncTaskListener() {
						@Override
						public void onAsyncTaskListener(String s) {

							if ( s != null ) {
								Toast.makeText(MainActivity.this,"画像が保存されました",Toast.LENGTH_SHORT).show();

								// ステータスコード
								Log.i("lightbox", String.format("code = %s",s));

								// 画像を読み込む
								bitmap = null;
								try {
									options = new BitmapFactory.Options();
									inputStream = MainActivity.this.openFileInput("save.jpg");
									bitmap = BitmapFactory.decodeStream(inputStream, null, options);	// ここではオプションは未指定
									inputStream.close();

								} catch (IOException e) {
									e.printStackTrace();
								}

								// 表示
								if ( bitmap != null ) {
									imageView.setImageBitmap(bitmap);
								}
							}
						}
					});

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

}


画面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

※ android.permission.INTERNET が必要です
※ コピーして使いやすいように、ソースコードにパッケージに依存する記述が無いので注意して下さい。
(画面は、.MainActivity なのでそのまま使用可能です)



【2017 Android Studioの最新記事】
posted by lightbox at 2017-09-09 16:57 | 2017 Android Studio | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり