web-dev-qa-db-ja.com

ルーム永続性ライブラリに画像を保存する方法

元々、カードビューに情報(文字列)と写真(ドローアブルから)を追加していました。リストから作業し、アダプターなどを使用してリサイクラービュー内のカードに追加しました。次に、Room Persistence Libraryを使用してこの情報を保存するように移行しようとしています。コードにダミー情報を追加する代わりに、ユーザー入力から取得するようにしています。これを実装しようとしているので、画像を保存することを発見しましたRoom DBへの移行は簡単ではありません。文字列は正常に機能しています。カメラから取得した画像を保存する方法が必要です。

タイプImage、Bitmap、URI、Drawablesを使用してRoom DBに画像を保存できません。

@Entity(tableName = "machines_table")
public class Machines {


    @PrimaryKey(autoGenerate = true)
    private int id;
    private Drawable photoId;
    private String name;
    private String location;

    public Machines(String name, String location, Drawable photoId) {
        this.name = name;
        this.location = location;
        this.photoId = photoId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public String getLocation() {
        return location;
    }

    public Drawable getPhotoId() {
        return photoId;
    }

}

私はもっ​​と簡単に画像を保存できると思っていたと思いますが、上記のタイプのいずれかを使用している場合はそうではなく、このエラーが発生します。

「エラー:このフィールドをデータベースに保存する方法がわかりません。タイプコンバーターを追加することを検討してください。」

3
Raymond Riter

あなたは純粋な画像を保存することはできません、画像を保存するための多くのオプションがあります:

  1. 画像をbase64に変換してデータベースに保存
  2. ローカルストレージに保存し、データベースにURIを保存する
  3. サーバーから画像のURLを取得し、データベースにURLを保存する