bitmapをpreferenceで保存して別の画面で使いたい
- 評価
- クリップ 0
- VIEW 1,900
前提・実現したいこと
プログラミング初心者です。
AndroidStudioを使ってアプリ開発をしています。
ボタンを押すとスマホのギャラリーから選択した画像と入力した名前がpreferenceに保存されるようにしようとしています。
保存した画像と名前はリストビューに表示されるようにしたいです。
発生している問題・エラーメッセージ
保存ボタンを押すと「繰り返し停止しています」とでる。
出てくるエラー
1675-1731/? E/storaged: getDiskStats failed with result NOT_SUPPORTED and size 0
3996-3996/? E/libc: Access denied finding property "ro.serialno"
30951-5609/? E/memtrack: Couldn't load memtrack module
1537-4403/? E/WVCdm: [metrics_collections.cpp(280):Serialize] Serializing session metrics. Session Count: 0
[metrics_collections.cpp(280):Serialize] Serializing session metrics. Session Count: 1
該当のソースコード
*****************画像と名前を登録するクラス*****************
public class Kaoadd extends AppCompatActivity{
private static final int REQUEST_GALLERY = 0;
private ImageView imageView;
private EditText editText;
private Bitmap bmp;
private SharedPreferences preferences;
private String bitmapStr;
private String name;
private Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kaoadd);
editText = findViewById(R.id.editText);
imageView = findViewById(R.id.image_view);
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_GALLERY);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_GALLERY && resultCode == RESULT_OK) {
try {
InputStream in = getContentResolver().openInputStream(data.getData());
bmp = BitmapFactory.decodeStream(in);
in.close();
// 選択した画像を表示
imageView.setImageBitmap(bmp);
} catch (Exception e) {
}
}
}
public void onButton2(View v) {
editText = (EditText) findViewById(R.id.editText2);
name = editText.getText().toString();
//保存したいBitmap
ByteArrayOutputStream boas = new ByteArrayOutputStream();
bmi.compress(Bitmap.CompressFormat.PNG,100,boas);
bitmapStr = Base64.encodeToString(boas.toByteArray(),Base64.DEFAULT);
preferences = getSharedPreferences("Gazo",MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name",name);
editor.putString("gazou",bitmapStr);
editor.commit();
Toast toast = Toast.makeText(this, "保存しました", Toast.LENGTH_LONG);
toast.show();
}
}
*****************preferenceを読み込むクラス***************************
public class Tsuika extends AppCompatActivity {
ArrayList kao;
private SharedPreferences preferences;
private ListView listView;
private ListAdapter adapter;
private String name;
private String s;
private Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tsuika);
preferences = getSharedPreferences("Gazo", MODE_PRIVATE);
name = preferences.getString("name", "");
s = preferences.getString("gazou","");
if (!s.equals("")) {
BitmapFactory.Options options = new BitmapFactory.Options();
byte[] b = Base64.decode(s, Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(b, 0, b.length).copy(Bitmap.Config.ARGB_8888, true);
}
if (!s.equals("")) {
ArrayList<ListRow> listItems = new ArrayList<>();
for (int i = 0; i < 3; i++) {
ListRow item = new ListRow(bitmap, name);
listItems.add(item);
// MyAdapterを作成し、データを設定
MyAdapter adapter = new MyAdapter(this, R.layout.list_layout, listItems);
// ListViewにArrayAdapterを関連付け、データの表示を行う
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
}
}
}
**********ListRow********************************
import android.graphics.Bitmap;
public class ListRow {
private Bitmap mThumbnail = null;
private String mTitle;
public ListRow(Bitmap thumbnail, String title) {
this.mThumbnail = thumbnail;
this.mTitle = title;
}
public String getTitle(){
return mTitle;
}
public void setTitle(String name){
this.mTitle = name;
}
public Bitmap getThumbnail(){
return mThumbnail;
}
public void setThumbnail(Bitmap thumbnail){
this.mThumbnail = thumbnail;
}
}
試したこと
日本語のサイトは全部見ましたがいまいちわからなかったです。。。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正の依頼
keicha_hrs
2018/09/15 16:06
JavaとJavaScriptは名前が似ているだけで全くの別物です。Android Studioでの開発言語はJavaですので、タグを張り替えてください。また、AndroidにはLogCatというログ表示の仕組みがあり、Android Studioでそれを閲覧することができます。エラーでアプリが落ちたときには、そこに大量のバックトレースログが出力されているはずです。それによってソースコードの何行目で何のエラーが発生したのかを調べることができます。それを手がかりに調査を試みてみましょう。それでもわからないときは、そのログを提示されるべきでしょう。
Saga_Honoka2525
2018/09/15 16:26
ご指摘ありがとうございます。LogCat試してみます
Saga_Honoka2525
2018/09/15 18:50
ボタンを押した際の「繰り返し停止」はEditTextのidが間違っていただけでデータの保存はできました。しかし受け取り側の画面の方で落ちてしまいます。受け取った画像データをもとにサムネイル付きのlistを表示させたいのですが、ListRow item = new ListRow(bitmap, name);書き方はこれで合っているのでしょうか。