Как исправить ошибку CURSOR_MISMATCH. Не использовать все таблицы в сущности - PullRequest
0 голосов
/ 26 июня 2019

Итак, я использую сущность в базе данных комнат персистентности.У меня есть несколько столбцов, но я хочу, чтобы только один из них был загружен в ActivityA.Позже в ActivityB я использую все остальные сделанные мной столбцы.Предупреждение, которое я получаю от Room, - CURSOR_MISMATCH, и он хочет, чтобы я игнорировал другие поля, это не то, что я хочу, поскольку я использую их в ActivityB.

Entity:

@Entity(tableName = "persons")
public class oPerson implements Parcelable {

    @PrimaryKey(autoGenerate = true)
    private int id;

    @ColumnInfo(name = "personName")
    private String personName;

    @ColumnInfo(name = "personRank")
    private String personRank;

    @ColumnInfo(name = "personAge")
    private String personAge;

    @ColumnInfo(name = "personAvailabilityMonday")
    private String personAvailabilityMonday;

    @ColumnInfo(name = "personAvailabilityTuesday")
    private String personAvailabilityTuesday;

    @ColumnInfo(name = "personAvailabilityWednesday")
    private String personAvailabilityWednesday;

    @ColumnInfo(name = "personAvailabilityThursday")
    private String personAvailabilityThursday;

    @ColumnInfo(name = "personAvailabilityFriday")
    private String personAvailabilityFriday;

    @ColumnInfo(name = "personAvailabilitySaturday")
    private String personAvailabilitySaturday;

    @ColumnInfo(name = "personAvailabilitySunday")
    private String personAvailabilitySunday;
}

Дао-запрос для ActivityA:

@Query("SELECT * FROM persons")
LiveData<List<oPerson>> getPersons();

Дао-запрос для ActivityB:

@Query("SELECT personName, id FROM persons")
LiveData<List<oPerson>> getPersonName();

If I Log.I ();моя сущность, которую я получаю для ActivityA:

[Entity{id: 'actual id', name: 'actual name', rank: 'actual rank', age: 'actual age' etc...},Entity{same as first}]

Если я регистрирую ActivityB:

[Entity{id: 'actual id', name: 'actual name', rank: 'null', age: 'null' etc...},Entity{same as first}]

Итак (поправьте меня, если я ошибаюсь) в ActivityB он загружает столбцы, которые мне не нужны, а также.Я надеюсь, что если я получу ответ, он будет примерно таким:

[Entity{id: 'actual id', name: 'actual name'},Entity{same as first}]

Так что теперь без других столбцов.Я не уверен, что это правильный путь, я вроде как новичок в Android и настойчивость комнаты.

1 Ответ

0 голосов
/ 26 июня 2019

это, вероятно, должно быть:

@Query("SELECT * FROM persons WHERE id = :id")
LiveData<oPerson> getPerson(int id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...