Zusammenfassung der Probleme bei der Verwendung des Android-Jetpack-Raums

Zusammenfassung der Probleme bei der Verwendung des Android-Jetpack-Raums

Schema 一 : Das Schemaexportverzeichnis wird dem Anmerkungsprozessor nicht zur Verfügung gestellt, sodass das Schema nicht exportiert werden kann. Sie können entweder ein room.schemaLocationAnnotation Processor-Argument angeben oder exportSchema auf false setzen.

Das Musterexportverzeichnis wird dem Anmerkungsprozessor nicht zur Verfügung gestellt, daher können keine Muster exportiert werden. Sie können den Annotationsprozessorparameter "room.schemaLocation" angeben oder exportSchema auf false setzen.

Lösung

1. Fügen Sie der build.gradle der App die folgende Konfiguration hinzu:

      javaCompileOptions {
    
    
            annotationProcessorOptions {
    
    
                arguments = ["room.schemaLocation":
                                     "$projectDir/schemas".toString()]
            }
        }

2. Fügen Sie exportSchema = false in die Datenbankanmerkung ein

@Database(entities = {
    
    User.class},version = 1,exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
    
    
    public abstract UserDao userDao();

}

der Grund:

Beim Kompilieren exportiert Room die Datenbankschemainformationen als JSON-Datei (das Standard-Exportschema exportSchema = true). Um das Schema zu exportieren, legen Sie die Annotation Processor-Eigenschaft room.schemaLocation in der Datei build.gradle fest (legen Sie den Speicherort fest, an dem der JSON gespeichert ist).

问题 二 : Es gibt mehrere gute Konstruktoren und Room wählt den Konstruktor ohne Argumente aus. Mit der Annotation @Ignore können Sie unerwünschte Konstruktoren entfernen.

Lösung: Wenn die
Entität mehrere Konstruktoren hat, können Sie die Annotation @Ignore verwenden, um den Rest des Konstruktors zu ignorieren und nur einen zu belassen.

    public User() {
    
    
    }
    @Ignore
    public User(int uid, String firstName, String lastName) {
    
    
        this.uid = uid;
        this.firstName = firstName;
        this.lastName = lastName;
    }

Hinweis: Sie können nicht alle Konstruktoren ignorieren, weder der Konstruktor noch der andere werden ignoriert.

Ich denke du magst

Origin blog.csdn.net/guojingbu/article/details/115245007
Empfohlen
Rangfolge