Вы должны аннотировать первичные ключи с помощью @NonNull?

Я получаю эту ошибку в этом фрагменте кода. You must annotate primary keys with @NonNull. "uidString" is nullable. Когда я комментирую его с помощью @NonNull и @PrimaryKey, An entity must have at least 1 field annotated with @PrimaryKey

Как дела?

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

import java.util.UUID;

@Entity(tableName = "player_profiles")
public class PlayerGameProfile implements Parcelable {

    @PrimaryKey
    public String uidString = UUID.randomUUID().toString();

    @ColumnInfo(name = "name")
    public String name;


person microflakes    schedule 12.11.2019    source источник
comment
When I annotate it with @NonNull, An entity must have at least 1 field annotated with @PrimaryKey Вы аннотировали его оба или только @NonNull?   -  person tkausl    schedule 13.11.2019
comment
Последний с обоими. Я тоже устал менять порядок   -  person microflakes    schedule 13.11.2019
comment
И убедитесь, что вы импортируете правильный пакет NonNull: import android.support.annotation.NonNull;   -  person Tiberiu Zulean    schedule 13.11.2019
comment
Да, извините за неаккуратную вставку кода, все присутствует. ОП отредактирован   -  person microflakes    schedule 13.11.2019
comment
Я попробовал то, что вы сделали, и у меня не было ошибок компиляции или сборки. Проблема в другом, а не в аннотациях. Кроме того, я использовал аннотации AndroidX и НЕ аннотации поддержки   -  person Shankha057    schedule 13.11.2019
comment
У вас есть последние библиотеки? в соответствии с Shankha507 работает нормально (а также пытался поменять местами @NonNull по отношению к @PrimaryKey). Я использую implementation 'androidx.room:room-runtime:2.2.1' и annotationProcessor 'androidx.room:room-compiler:2.2.1'. Я столкнулся с тем, что, похоже, было той же проблемой с более ранними библиотеками.   -  person MikeT    schedule 13.11.2019


Ответы (4)


Для Java вы должны аннотировать с помощью @android.support.annotation.NonNull

Удалите другой импорт NonNull, который вы еще используете, и измените его на

import android.support.annotation.NonNull;

Затем используйте обе аннотации

@PrimaryKey
@NonNull
person otto    schedule 12.11.2019

В моем случае у меня было:

@PrimaryKey @NonNull var reasonId: String? = Constants.EMPTY_STRING, 

вместо:

@PrimaryKey @NonNull var reasonId: String = Constants.EMPTY_STRING, 

person John Owuor    schedule 26.11.2020
comment
Если вы пишете kotlin, вам не нужно @NonNull при условии, что вы используете ненулевой тип - person JensV; 26.11.2020

Вы можете попробовать связать первичный ключ с Entity следующим образом:

@Entity(tableName = "player_profiles",
        primaryKeys = { "uidString" })

После этого аннотируйте свой первичный ключ @NonNull в классе ниже.

@NonNull
public String uidString = UUID.randomUUID().toString();
person Tiberiu Zulean    schedule 12.11.2019
comment
:( все еще получаю вторую ошибку о по крайней мере 1 первичном ключе - person microflakes; 13.11.2019
comment
Также убедитесь, что вы попробовали другой пакет импорта для NonNull, упомянутый в моем комментарии к OP: import android.support.annotation.NonNull - person Tiberiu Zulean; 13.11.2019

проверьте чувствительность к регистру, это должно быть «@NonNull», а не «@Nonnull» import androidx.annotation.NonNull;

person nitin gupta    schedule 23.04.2020
comment
Это, собственно, то, что говорит текст в вопросе. - person Ryan M; 23.04.2020