SQLの窓

2016年10月18日


Firebase storage の画像の URL を取得して、通常と同様に Stream でダウンロードして ImageView に表示する / Android

Firebase の環境とプロジェクトの作成方法

9.6.1 を使用する場合
エミュレータ : SDK Manager で最新に更新
実機 : Google Play 開発者サービスを最新に更新

Firebase ドキュメント : URL 経由でデータをダウンロードする
getDownloadUrl メソッドで Uri を取得した後は、通常どおり AsyncTask 内で Stream で読み込みます。 MainActivity
public class MainActivity extends AppCompatActivity {

	// ダウンロード用
	private FirebaseStorage storage;
	private StorageReference storageRef;
	private StorageReference imageRef;
	private ImageView imageView;
	private ProgressDialog progress;

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

// ▼ テスト用のルール
//		service firebase.storage {
//			match /b/freebase-654b7.appspot.com/o {
//				match /{allPaths=**} {
//					allow read;
//					allow write: if true;
//				}
//			}
//		}

		// ダウンロードするファイル
		storage = FirebaseStorage.getInstance();
		storageRef = storage.getReferenceFromUrl("gs://freebase-654b7.appspot.com/");
		imageRef = storageRef.child("sworc2.png");

		// 表示する場所
		imageView = (ImageView) MainActivity.this.findViewById(R.id.imageView);

		// ダウンロード中のダイアログ
		progress = new ProgressDialog(MainActivity.this);

		// *************************************
		// 表示2 ( Uri を取得 => Stream )
		// *************************************
		Button button = (Button) MainActivity.this.findViewById(R.id.downloadButton);
		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// ダウンロード中の表示
				progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
				progress.setMessage("画像をダウンロードしています");
				progress.show();

				// ダウンロード用の URL を取得
				imageRef.getDownloadUrl()
					.addOnSuccessListener(new OnSuccessListener<Uri>() {
						@Override
						public void onSuccess(Uri uri) {
							Log.i("lightbox","ダウンロード開始");

							new AsyncTask<Uri, Void, Bitmap>(){
								@Override
								protected Bitmap doInBackground(Uri... params) {

									Uri uri = params[0];
									Log.i("lightbox",uri.toString());
									URL url = null;
									try {
										url = new URL(uri.toString());
									} catch (Exception e) {
										e.printStackTrace();
									}
									Bitmap image = null;
									// 読み込みオプション
									BitmapFactory.Options options;
									try {
										// インターネット上の画像を取得して、Bitmap に変換
										options = new BitmapFactory.Options();
										// 実際に読み込む事をオプションに設定
										options.inJustDecodeBounds = false;
										// ストリーム取得
										InputStream is = (InputStream) url.getContent();
										// ストリームよりビットマップを作成
										image = BitmapFactory.decodeStream(is, null, options);
										// ストリームを閉じる
										is.close();
									} catch (Exception e) {
										e.printStackTrace();
									}
									return image;
								}

								@Override
								protected void onPostExecute(Bitmap bitmap) {
									if ( bitmap != null ) {
										imageView.setImageBitmap(bitmap);
									}
									// ダウンロード中の表示解除
									progress.dismiss();

								}
							}.execute(uri);

						}
					})
					.addOnFailureListener(new OnFailureListener() {
						@Override
						public void onFailure(@NonNull Exception e) {
							Log.i("lightbox","データ取得に失敗しました");
							Log.i("lightbox",e.getMessage());
							// ダウンロード中の表示解除
							progress.dismiss();
							// メッセージ表示
							Toast.makeText(MainActivity.this,"ダウンロードに失敗しました",Toast.LENGTH_LONG).show();
						}
					});

			}
		});

	}
}


build.gradle(Project)
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.1'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


build.gradle(Module: app)
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "lightbox.sep.fire1"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.google.firebase:firebase-core:9.6.1'
    compile 'com.google.firebase:firebase-storage:9.6.1'
    compile 'com.google.firebase:firebase-auth:9.6.1'
}

apply plugin: 'com.google.gms.google-services'
※ auth はここでは使用していません
※ AndroidManifest.xml には、android.permission.INTERNET を設定


【Android Studio 2016の最新記事】
posted by lightbox at 2016-10-18 18:46 | Comment(0) | Android Studio 2016 | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり