2016-06-17 16 views
6

Non appena cerco di ottenere il mio oggetto dal database di Realm, l'applicazione è caduto e ottengo questo errore:oggetto non fa parte dello schema di questo Realm

java.lang.RuntimeException: Unable to start activity 
     ComponentInfo{com.repdev.realtimedelijn/com.repdev.realtimedelijn.activity.MainActivity}: 
    java.lang.IllegalArgumentException: Haltes is not part of the schema for this Realm 

Questa è la mia attività erano succede

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Fabric.with(this, new Crashlytics()); 
    setContentView(R.layout.activity_main); 
    Context context = this; 
    View view = this.getWindow().getDecorView(); 

    realm = Realm.getInstance(getRealmConfiguration()); 
    RealmResults<Haltes> haltes = realm 
      .where(Haltes.class) 
      .findAll(); 
    HaltesRecyclerViewAdapter haltesRecyclerViewAdapter = 
      new HaltesRecyclerViewAdapter(this, haltes, true, true); 
    RealmRecyclerView realmRecyclerView = 
      (RealmRecyclerView) findViewById(R.id.realm_recycler_view); 
    realmRecyclerView.setAdapter(haltesRecyclerViewAdapter); 
} 

e qui è il modello

qualcuno un'idea di come risolvere il problema? public class Haltes implementa RealmModel {

@PrimaryKey 
private long id; 

private String halteNaam; 
private String halteNummer; 

public long getId() { 

    return id; 
} 

public void setId(long id) { 

    this.id = id; 
} 

public String getHalteNaam() { 

    return halteNaam; 
} 

public void setHalteNaam(String halteNaam) { 

    this.halteNaam = halteNaam; 
} 

public String getHalteNummer() { 

    return halteNummer; 
} 

public void setHalteNummer(String halteNummer) { 

    this.halteNummer = halteNummer; 
} 

}

risposta

1

Il mio problema è stato risolto dichiarando apply plugin: 'realm-android' dopo tutti gli altri plugin.

App level Gradle

apply plugin: 'android-apt' 
apply plugin: 'realm-android' 

android { 
    compileSdkVersion rootProject.ext.compileSdkVersion 
    buildToolsVersion rootProject.ext.buildToolsVersion 
1

Si sta utilizzando il @RealmClass annotazioni? Se si utilizzano annotazioni, assicurarsi di avere l'elaborazione delle annotazioni abilitata nelle impostazioni dello studio Android.

+0

No non ho mai usato che annotazione, sto solo imparando a ottenere la mia strada con Realm così ho seguito solo alcuni Tuts., Il mio post viene aggiornato con il mio codice btw. –

+0

Quale versione di realm stai usando se non stai usando le annotazioni? Inoltre, questo è probabilmente un problema di migrazione. Prova a pulire e ricostruire il tuo progetto o rimuovere manualmente la cartella '.apt_generated' se questo non funziona. – Bob

+0

Ecco un link al mio codice sorgente https://bitbucket.org/repdev/realtimedelijnandroid/src –

0

Credo che questo abbia a che fare con l'aggiunta di una nuova classe Realm Model dopo che alcuni modelli sono già stati aggiunti. prova a installare l'applicazione ed esegui nuovamente o esegui la migrazione dello schema.

La classe Haltes estende RealmObject?

Fai così:

public class Haltes extends RealmObject 

o

@RealmClass 
public class Haltes implements RealmModel 
+1

Appena provato, non funziona. Ho disinstallato l'app, anche messo Realm.deleteRealm (getRealmConfiguration()); nel codice per un nuovo inizio. Non aiuta –

+0

Assicurati che la tua classe estenda RealmObject, hai detto che implementa è come un'interfaccia, dovrebbe estenderla. –

+0

Sono abbastanza nuovo per lo sviluppo di Android con le librerie, quindi è un po 'come una novità per tutto questo. Ecco un link al mio codice sorgente https://bitbucket.org/repdev/realtimedelijnandroid/src –

1

Non hai aggiunto al tuo Reame build.gradle del file: https://bitbucket.org/repdev/realtimedelijnandroid/src/77c531768dc1250b4d5b5c6c7fd4e6100764177d/build.gradle?at=master&fileviewer=file-view-default

Guarda come qui: https://realm.io/docs/java/latest/#installation

tuo livello superiore build.gradle file dovrebbe avere questo

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    classpath "io.realm:realm-gradle-plugin:1.0.1" 
    } 
} 

Il tuo livello di applicazione build.gradle di file dovrebbe avere questo in cima:

apply plugin: 'realm-android' 
0

ho ottenuto questa eccezione quando si utilizza un progetto di libreria con il mio progetto app e plug regno viene applicata solo al progetto della biblioteca. Quando ho aggiunto il plugin di realm `applica il plugin: 'realm-android' al progetto dell'app, l'eccezione è andata.

Assicurarsi che il plugin di ream sia aggiunto a ogni progetto gradle che utilizza il dominio.

3

Prova questa: Android Studio -> Build -> Ricostruisci & Clean Progetto

9

ha avuto lo stesso problema durante l'utilizzo lungo il lato con retrolambda e Android-apt. cambiando l'ordine di plugin nel livello di applicazione di file build.gradle ha funzionato per me:

apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' 
apply plugin: 'me.tatarka.retrolambda' 
apply plugin: 'realm-android' 

Github problema: https://github.com/realm/realm-java/issues/3783#issuecomment-260578984

+1

Questo ha funzionato per me. Ho spostato un progetto su Android Annotations e Realm ha smesso di funzionare, questo ha risolto il mio problema – Sapher

+0

Se si utilizza Kotlin, rimuovere il plugin 'android-apt' e utilizzare' kotlin-kapt'. Questo l'ha risolto per me. – levibostian

+0

Mettendo 'realm-android' dopo' android-apt' ha funzionato per me. – dubbelugh

Problemi correlati