Ошибка помещения: Не уверен, как обработать тип возврата метода вставки - PullRequest
0 голосов
/ 10 июля 2019

Я не понимаю, хотя это способ получения идентификатора недавно вставленной строки.

DAO

@Dao
public interface AlarmDao {

    .....

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertAll(AlarmEntity...alarms); //used long instead of void
}

ЛИЦО

@Entity(tableName = "tb_alarm")
public class AlarmEntity {

    @PrimaryKey(autoGenerate = true)
    private long id;

    ...

    public long getId(){
        return this.id;
    }
}

но сборка не удалась, и я получаю сообщение об ошибке, указывающее на мой класс Dao, и ошибка:

ошибка: не уверен, как обработать тип возвращаемого значения метода вставки.

Что я пропустил об этом?

Ответы [ 3 ]

3 голосов
/ 10 июля 2019
AlarmEntity...alarms

это переводится в несколько вставок. Таким образом, тип возвращаемого значения должен быть List<Long> или long[], и это имеет смысл. Если вы передадите два элемента, вы получите два идентификатора, по одному для каждой вновь вставленной строки.

Если вы хотите вставить только 1 элемент за раз, удалите varargs (...). EG

@Insert
long insert(AlarmEntity alarms);
1 голос
/ 10 июля 2019

В соответствии с документацией, если метод @Insert получает только 1 параметр, он может вернуть long, который является новым rowId для вставленного элемента.Если параметр является массивом или коллекцией, он должен возвратить long[] или List<Long>.в вашем случае у вас есть список параметров, вы должны вернуть long[] или List<Long> Источник: https://developer.android.com/training/data-storage/room/accessing-data#java

1 голос
/ 10 июля 2019

С Доступ к данным с использованием комнатных DAO :

Если метод @Insert получает только 1 параметр, он может вернуть long, который является новым rowId для вставленного элемента. Если параметр является массивом или коллекцией, он должен возвращать long [] или List.

Измените тип возврата insertAll () на long [] или List

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...