質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

2回答

742閲覧

Realmで複数画像を保存

Sai123

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2018/01/21 10:04

###前提・実現したいこと
Android Studio でユーザーが指定した複数の画像を
Realmで保存したいと思ってます。

しかし、複数画像を選択しても最初に選んだ1枚しか保存されていません。

###該当のソースコード

java

1 private void pickImage(){ 2 Intent intent = new Intent(); 3 intent.setType("image/*"); 4 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 5 intent.setAction(Intent.ACTION_GET_CONTENT); 6 startActivityForResult(Intent.createChooser( 7 intent, "画像を選択します"),REQUEST_CODE); 8 } 9 10 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 11 if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 12 if (data.getData() != null) { 13 // 単一の選択処理 14 try { 15 Uri uri = data.getData(); 16 InputStream in = getContentResolver().openInputStream(uri); 17 Bitmap img = BitmapFactory.decodeStream(in); 18 in.close(); 19 // 選択した画像を表示 20 mphotoImage.setImageBitmap(img); 21 } catch (FileNotFoundException e) { 22 e.printStackTrace(); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 } 27 28 else { 29 // 複数選択の処理 30 ClipData clipData = data.getClipData(); 31 for (int i = 0; i < clipData.getItemCount(); i++) { 32 // i に対するビューを設定 33 ImageView targetView = null; 34 switch (i) { 35 case 0: 36 targetView = mphotoImage; 37 break; 38 default: 39 break; 40 } 41 // ビューに画像を設定 42 if (mphotoImage != null) { 43 try { 44 ClipData.Item item = clipData.getItemAt(i); 45 Uri uri = item.getUri(); 46 InputStream in = getContentResolver().openInputStream(uri); 47 Bitmap img = BitmapFactory.decodeStream(in); 48 in.close(); 49 // 選択した画像[i]を表示 50 mphotoImage.setImageBitmap(img); 51 } catch (FileNotFoundException e) { 52 e.printStackTrace(); 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } 56 } 57 } 58 } 59 } 60 } 61//ボタン押したら保存する処理 62public void onSavedTappedButton (View view) { 63 mRealm.executeTransaction(new Realm.Transaction() { 64 @Override 65 public void execute(Realm realm) { 66 Number maxId = realm.where(SlideshowModel.class).max("id"); 67 long nextId = 0; 68 if (maxId != null) nextId = maxId.longValue() + 1; 69 SlideshowModel slideshowModel = realm.createObject(SlideshowModel.class, new Long(nextId)); 70 slideshowModel.setTitle(mTitleEdit.getText().toString()); 71 72 BitmapDrawable bitmap = 73 (BitmapDrawable) mphotoImage.getDrawable(); 74 byte[] bytes = MyUnits.getByteFromImage 75 (bitmap.getBitmap()); 76 if (bytes != null && bytes.length > 0) { 77 slideshowModel.setImage(bytes); 78 } 79 } 80 }); 81 Toast.makeText(this,"追加しました!",Toast.LENGTH_LONG).show(); 82 finish(); 83 }

###試したこと
画像を1枚取り込むことはできていると思います。
しかし、複数画像を取り込んで保存ができていません。
どうコードを直せばよいのでしょうか?

###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio 3.0.0
実機はGalaxyS6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Realmに保存する場所で、下記手順で確認してみてはどうでしょうか?
3枚の画像として渡っていれば、3枚の画像が保存出来るはずです。

1.読み込んだBitmapをbit1,bit2,bi3としてBitmap画像のまま保存する
2.Bitmap画像が3枚保存出来ていたら、次にByte配列をテキストファイルとして3個保存出来ているか確認する
3.テキストファイルが3個が出来ていたら、中身のByteが値になっているか確認する

投稿2018/01/30 03:31

Wind

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ClipData clipData = data.getClipData();
for (int i = 0; i < clipData.getItemCount(); i++) {
の部分で正しくitemCountが取得できているでしょうか?デバッガなり、コンソール出力(Systemout)などで確認してみてください。

投稿2018/01/22 04:36

unz.hori

総合スコア1057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sai123

2018/01/27 04:01

デバッガを行ってみました。 ClipData { image/* {U:content://com.android.providers.media.documents/document/image%3A12858} {U:content://com.android.providers.media.documents/document/image%3A12842} {U:content://com.android.providers.media.documents/document/image%3A12859} } 画像を3枚選択したら、このような表示になるので取得は出来ていると思っております。 保存する処理を修正する必要があるのでしょうか? よろしくお願い致します。
unz.hori

2018/01/29 01:09

ソースを見ていても具体的に保存する部分が良くわかりません。どの部分で保存しているんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問