Firestore DBレコードにJPEG画像を追加する必要があります。私の好きな方法は、Sqliteレコードで使用したBlobです。私はこれを試す際にいくつかの問題に遭遇しました。以下は、これまでの私の最善の試みです。
public Blob getImage() {
Uri uri = Uri.fromFile(new
File(mCurrentPhotoPath));
File f1 = new File(mCurrentPhotoPath);
URL myURL = null;
try {
myURL = f1.toURI().toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
Bitmap bitmap = null;
BitmapFactory.Options options = new
BitmapFactory.Options();
options.inPreferredConfig =
Bitmap.Config.ARGB_8888;
try {
if (myURL != null) {
bitmap =
BitmapFactory.decodeStream(
myURL.openConnection().getInputStream());
String wBlob =
encodeToBase64(bitmap,
Bitmap.CompressFormat.JPEG, 100);
blob = fromBase64String(wBlob);
}
} catch (Java.io.IOException e) {
e.printStackTrace();
}
return blob;
}
私の問題は
blob = fromBase64String(wBlob);
レコードを設定するクラスにblobを渡すことにも問題があります。 intent.putExtra( "blobImage"、blob);どんな助けにも感謝します。
原則として、かなり小さいアイコンを保存しない限り、「これを行わないでください」と言います。
Cloud Firestoreにネイティブバイナリデータを保存できますが(実際に画像をbase64エンコードする必要はありません)、データベースのいくつかの制限に直面します-特に、単一のドキュメントではできません1MBを超えるサイズにする。
代わりに、画像自体をCloud Storage for Firebaseに保存し、ダウンロードURLをCloud Firestoreに保持します。 Cloud Storageは、ストレージコストの点で約7倍安く、最大ファイルサイズの点ではるかに大きな制限があり、これらのダウンロードURLを取得することで、画像のダウンロードを管理できるPicassoやGlideなどのサードパーティライブラリを利用できます。また、メモリやディスクのキャッシュ、プレースホルダグラフィックスの表示などの優れた機能も追加します。
詳細については、 このビデオ を参照してください。