คุณต้องใส่คำอธิบายประกอบคีย์หลักด้วย @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
ใช่ ขออภัยสำหรับการวางโค้ดที่เลอะเทอะ มีทั้งหมดอยู่ OP แก้ไขแล้ว   -  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(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