LoginSignup
1
2

More than 5 years have passed since last update.

AndroidのRealm javaでデータの永続化ができないトラブルシューティング

Last updated at Posted at 2016-09-15

まず下記設定内容で、やった場合に何故かデータが永続化されない。。

build.gradle(app)

〜省略〜
apply plugin: 'realm-android'
〜省略〜

build.gradle(project)

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
        classpath "io.realm:realm-gradle-plugin:1.1.0"
    }
}
〜省略〜
MainActivity.java

public class MainActivity extends AppCompatActivity {


    private Realm realm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Configure Realm for the application
        RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
        Realm.deleteRealm(realmConfiguration); // Clean slate
        Realm.setDefaultConfiguration(realmConfiguration); // Make this Realm the default

このRealmの設定情報で、適宜データを追加。

アプリを起動中はデータが存在するが、アプリを戻るなどで停止や、
クラッシュして停止し、
再度起動するとデータが 0件。。。

Realのサンプルソースとにらめっこして、
Realm.closeのタイミングをずらしたりしたが、関係なく。

色々やっていると、なんと。。
初回起動する際に指定するActivityが

MainActivity.java

public class MainActivity extends AppCompatActivity {

AndroidManifest.xml
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"

と application:nameの指定がなく、
application:nameで指定するjavaファイルを
extends Applicationじゃない点を。
改善してみると。

なんと無事永続化!!!できました。汗
なんじゃこれw

下記のようにしたら改善されました。(泣)

AndroidManifest.xml

<application
        android:name=".MyApplication"  <!-- ←★ちゃんと指定 -->
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"

MyApplication.java

import android.app.Application;

import io.realm.Realm;
import io.realm.RealmConfiguration;

// ★extends Applicationに!!★
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // Configure Realm for the application
        RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
        Realm.deleteRealm(realmConfiguration); // Clean slate
        Realm.setDefaultConfiguration(realmConfiguration); // Make this Realm the default
    }
}

で、あとで気づいた。。
ちゃんと書いてあった。汗

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2