Anda harus memberi anotasi pada kunci utama dengan @NonNull?

Saya mendapatkan kesalahan ini pada potongan kode ini. You must annotate primary keys with @NonNull. "uidString" is nullable. Saat saya membubuhi keterangan dengan @NonNull dan @PrimaryKey, An entity must have at least 1 field annotated with @PrimaryKey

Ada apa?

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 sumber
comment
When I annotate it with @NonNull, An entity must have at least 1 field annotated with @PrimaryKey Apakah Anda memberi anotasi dengan keduanya atau hanya @NonNull?   -  person tkausl    schedule 13.11.2019
comment
Yang terakhir adalah dengan keduanya. Saya lelah mengubah pesanan juga   -  person microflakes    schedule 13.11.2019
comment
Dan pastikan Anda mengimpor paket NonNull yang benar: import android.support.annotation.NonNull;   -  person Tiberiu Zulean    schedule 13.11.2019
comment
Ya, maaf untuk tempel kode yang ceroboh, semua ada. OP diedit   -  person microflakes    schedule 13.11.2019
comment
Saya telah mencoba apa yang Anda lakukan dan saya tidak mendapatkan kesalahan kompilasi atau pembuatan apa pun. Masalahnya ada di tempat lain dan bukan pada anotasinya. Selain itu, saya menggunakan anotasi AndroidX dan TIDAK anotasi dukungan   -  person Shankha057    schedule 13.11.2019
comment
Apakah Anda memiliki perpustakaan terbaru? sesuai Shankha507 berfungsi dengan baik (dan juga mencoba menukar posisi @NonNull sehubungan dengan @PrimaryKey). Saya menggunakan implementation 'androidx.room:room-runtime:2.2.1' dan annotationProcessor 'androidx.room:room-compiler:2.2.1'. Saya memang menemukan masalah yang tampaknya sama dengan perpustakaan sebelumnya.   -  person MikeT    schedule 13.11.2019


Jawaban (4)


Untuk Java Anda harus memberi anotasi dengan @android.support.annotation.NonNull

Hapus impor NonNull lain yang Anda gunakan dan ubah menjadi

import android.support.annotation.NonNull;

Kemudian gunakan kedua anotasi tersebut

@PrimaryKey
@NonNull
person otto    schedule 12.11.2019

Dalam kasus saya, saya punya:

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

alih-alih:

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

person John Owuor    schedule 26.11.2020
comment
Jika Anda menulis kotlin, Anda tidak memerlukan @NonNull asalkan Anda menggunakan tipe non-nullable - person JensV; 26.11.2020

Anda dapat mencoba mengikat kunci utama dengan Entitas seperti ini:

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

Setelah itu beri anotasi pada kunci utama Anda dengan @NonNull pada kelas di bawah ini.

@NonNull
public String uidString = UUID.randomUUID().toString();
person Tiberiu Zulean    schedule 12.11.2019
comment
:( masih mendapatkan kesalahan kedua tentang setidaknya 1 kunci utama - person microflakes; 13.11.2019
comment
Pastikan juga Anda mencoba paket impor lain untuk NonNull yang disebutkan dalam komentar saya ke OP: import android.support.annotation.NonNull - person Tiberiu Zulean; 13.11.2019

periksa sensitivitas huruf besar-kecil, seharusnya "@NonNull" dan bukan "@Nonnull" import androidx.annotation.NonNull;

person nitin gupta    schedule 23.04.2020
comment
Faktanya, itulah yang dikatakan teks dalam pertanyaan tersebut. - person Ryan M; 23.04.2020