Android Room Base64 - PullRequest
       12

Android Room Base64

0 голосов
/ 09 апреля 2019

Я пытаюсь сохранить значение base64 в моей базе данных sqlite, используя Room, и по какой-то причине оно не сохраняется. Ну, я предполагаю, что это не сохранение, потому что, когда я пытаюсь прочитать таблицу со столбцом base64, он возвращает значения для всех других столбцов, кроме столбца base64. Что я делаю не так?

Моя сущность:

@Entity(tableName = "healthCareWorkerInformation",
        foreignKeys = @ForeignKey(
                entity = HealthCareWorker.class,
                parentColumns = {"id"},
                childColumns = {"hcwId"},
                onDelete = ForeignKey.CASCADE),
        indices = @Index(
                value = {"hcwId"}))
public class HealthCareWorkersInformation {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "hcwInfoId")
    private long id;
    private long hcwId;
    //@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
    private String base64Image;
    private String updatedAt = new SimpleDateFormat("dd MM yyyy, HH:mm",
            Locale.getDefault()).format(Calendar.getInstance().getTime());

    public HealthCareWorkersInformation() {
    }

    @Ignore
    public HealthCareWorkersInformation(long hcwId) {
        this.hcwId = hcwId;
    }

    public long getId() {
        return id;
    }

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

    public long getHcwId() {
        return hcwId;
    }

    public void setHcwId(long hcwId) {
        this.hcwId = hcwId;
    }

    public String getBase64Image() {
        return base64Image;
    }

    public void setBase64Image(String base64Image) {
        this.base64Image = base64Image;
    }

    public String getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(String updatedAt) {
        this.updatedAt = updatedAt;
    }
}

Мой DAO:

@Insert
void insertHealthCareWorkerInformation(HealthCareWorkersInformation healthCareWorkersInformation);

@Query("SELECT * FROM HEALTHCAREWORKERINFORMATION")
LiveData<List<HealthCareWorkerInformation>> getHCWInfo();

Пример данных, которые я отправляю через:

{"consentGiven":null,"hcwId":1,"patiendId":1,"name":"Ben","lastName":"Ben","dateOfBirth":"4/9/2019","phoneNumber":"+271234567","base64Image":"data:image/png;base64,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"}

Все остальное сохраняется, кроме столбца base64. Пожалуйста, помогите.

1 Ответ

1 голос
/ 09 апреля 2019

Проблема заключается в точке с запятой в data:image/png;base64, в сочетании с " двойными кавычками.

Самым простым будет сохранить строку base64 без этого префикса, что нарушает синтаксис и затем принимаетэто все PNG изображений (или добавьте дополнительное поле, которое указывает кодировку каждого изображения).

Эта проблема не относится только к Room, но относится только к Java с SQLiteпотому что эта точка с запятой завершает оператор (который сгенерирует Room).В Java можно использовать ' одинарные кавычки только для примитивного типа данных char, тогда как сложный тип данных String исключает " двойные кавычки.Единственный способ обойти это ограничение - не пытаться сохранить String, содержащий ;.

. В качестве примера того, что я имею в виду:

private String base64String = null;
private String base64Type = "png";

public String getBase64Image() {
    if(this.base64String != null) {
        return "data:image/" + this.base64Type + ";base64," + this.base64String;
    } else {
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...