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
これが私の活動です
@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);
}
これがモデルです
誰かがそれを修正する方法を考えていますか?公開クラスHaltesは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;
}
}
他のすべてのプラグインの後にapply plugin: 'realm-Android'
を宣言することで、問題は解決しました。
アプリレベルのGradle
apply plugin: 'Android-apt'
apply plugin: 'realm-Android'
Android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
retrolambdaおよびAndroid-aptと一緒に使用するときに同じ問題がありました。 アプリレベルでのプラグインの順序の変更build.gradle
ファイルは私のために働いた:
apply plugin: 'com.Android.application'
apply plugin: 'com.neenbedankt.Android-apt'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'realm-Android'
Githubの問題: https://github.com/realm/realm-Java/issues/3783#issuecomment-260578984
私の場合、kotlin-kaptをapp.gradleに貼り付ける必要がありました
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'kotlin-kapt' <<<<<<<<<<the 1st row<<<<<<<<<
apply plugin: 'realm-Android' <<<<<the second row<<<<<
私はこの問題を解決するために6時間を費やしました。そして今それは動作します。そして、どのように上に書かれたか-すべてのプラグインの最後にrealm-Androidを追加する必要があります!
これを試してください:Android Studio-> Build-> Rebuild&Clean Project
@RealmClass
アノテーションを使用していますか?アノテーションを使用している場合は、Androidスタジオの設定でアノテーション処理が有効になっていることを確認してください。
これは、いくつかのモデルがすでに追加された後に、新しいRealm Modelクラスを追加することに関係していると思います。アプリケーションをアンインストールしてもう一度実行するか、スキーマを移行してください。
あなたのHaltesクラスはRealmObjectを拡張していますか?
このようにしてください:
public class Haltes extends RealmObject
または
@RealmClass
public class Haltes implements RealmModel
レルムをbuild.gradle
ファイルに追加していません: https://bitbucket.org/repdev/realtimedelijnandroid/src/77c531768dc1250b4d5b5c6c7fd4e6100764177d/build.gradle?at=master&fileviewer=file-view-default =
こちらをご覧ください: https://realm.io/docs/Java/latest/#installation
最上位のbuild.gradle
ファイルにはこれが必要です
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:1.0.1"
}
}
アプリレベルのbuild.gradle
ファイルの上部に次のようにする必要があります。
apply plugin: 'realm-Android'
アプリプロジェクトでライブラリプロジェクトを使用しているときにこの例外が発生し、レルムプラグインがライブラリプロジェクトにのみ適用されました。レルムプラグイン `apply plugin: 'realm-Android'をアプリプロジェクトに追加すると、例外がなくなりました。
レルムを使用するすべてのGradleプロジェクトにレルムプラグインが追加されていることを確認してください。
コードベースでKotlinの混合を使用している場合、この問題はkotlin-kapt
の前にrealm-Android
を適用することで解決されます。
あれは:
apply plugin: 'kotlin-kapt' apply plugin: 'realm-Android'