मेरे एंड्रॉइड प्रोजेक्ट में मेरे पास निम्न जावा कक्षाएं हैं।

@Entity
public class Daily {

    @PrimaryKey
    private Date dailyId;

    //Other non important attrs, getters, setters, etc.

}

@Entity(primaryKeys = {"dailyId", "dailyDetailId"})
public class DailyDetail {

    private Date dailyId; //which is the value of its unique parent.
    private Long dailyDetailId;

    //Other non important attrs, getters, setters, etc.

}

वैसे: मैंने पहले ही टाइप कन्वर्टर्स जोड़े हैं।

और जब मैं प्रोजेक्ट बनाने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिलती है:

You must annotate primary keys with @NonNull. "dailyId" is nullable. SQLite considers this a bug and Room does not allow it.

फिर, जब मैं निर्देशों का पालन करता हूं और dailyid में @NonNull जोड़ता हूं, तो यह कहता है Not-null fields must be initialized (?)

मुझे इसे कैसे ठीक करना चाहिए? मेरा विचार प्राथमिक कुंजी दोनों को प्रारंभ करना है, लेकिन जब मैं डीबी में एक नई वस्तु डालने का प्रयास करता हूं तो यह एक समस्या होनी चाहिए।

2
Gonzalo Dambra 26 अप्रैल 2020, 19:59

1 उत्तर

सबसे बढ़िया उत्तर

फिर, जब मैं निर्देशों का पालन करता हूं और @NonNull को डेलीड में जोड़ता हूं, तो यह कहता है कि नॉट-नल फ़ील्ड को इनिशियलाइज़ किया जाना चाहिए (?)

यदि आप @NonNull के साथ किसी फ़ील्ड को एनोटेट करते हैं तो आप संकलक को बता रहे हैं "यह बात कभी भी शून्य नहीं होगी"। लेकिन जावा में एक अप्रारंभीकृत वस्तु का डिफ़ॉल्ट मान क्या है? ये सही है! शून्य. इसलिए यदि आप किसी फ़ील्ड को @NonNull के साथ एनोटेट करते हैं, तो आपको यह सुनिश्चित करने के लिए इसे प्रारंभ करना होगा कि यह शून्य से शुरू नहीं होता है।

मुझे इसे कैसे ठीक करना चाहिए?

अपने क्षेत्र को प्रारंभ करें। या तो तुरंत घोषणा पर या क्लास कंस्ट्रक्टर में।

@NonNull
@PrimaryKey
private Date dailyId = new Date(); // Now it's initialized and not null

या

@Entity
public class Daily {

    @NonNull
    @PrimaryKey
    private Date dailyId;

    public Daily() {
        dailyId = new Date(); // Now it's initialized and not null
    }

    // ^- this AND / OR this -v

    // Note here that if using an argument in the constructor, it too must be
    // annotated as @NonNull to tell the compiler that you're setting the value
    // of your non-nullable field to something that won't itself be null
    public Daily(@NonNull Date initialDate) {
        dailyId = initialDate; // Now it's initialized and not null
    }
}

उम्मीद है की वो मदद करदे!

2
dominicoder 26 अप्रैल 2020, 20:30