java.lang.IllegalArgumentException:Realm directory is not writable: /data/user/0/pkg/files.
應用內代碼:
Realm.init(this); RealmConfiguration realmConfiguration = new RealmConfiguration.Builder() .directory(realmDir) .name("DataCenter.realm") .deleteRealmIfMigrationNeeded() .schemaVersion(11) .migration(new McMigration()) .build(); Realm.setDefaultConfiguration(realmConfiguration);
源碼:
public Builder directory(File directory) { //noinspection ConstantConditions if (directory == null) { throw new IllegalArgumentException("Non-null 'dir' required."); } if (directory.isFile()) { throw new IllegalArgumentException("'dir' is a file, not a directory: " + directory.getAbsolutePath() + "."); } if (!directory.exists() && !directory.mkdirs()) { throw new IllegalArgumentException("Could not create the specified directory: " + directory.getAbsolutePath() + "."); } if (!directory.canWrite()) { throw new IllegalArgumentException("Realm directory is not writable: " + directory.getAbsolutePath() + "."); } this.directory = directory; return this; }
修復:
if (!realmDir.canWrite()){ realmDir = getExternalFilesDir("realm"); } // 初始化 Realm Realm.init(this); assert realmDir != null; RealmConfiguration realmConfiguration = new RealmConfiguration.Builder() .directory(realmDir) .name("DataCenter.realm") .deleteRealmIfMigrationNeeded() .schemaVersion(11) .migration(new McMigration()) .build(); Realm.setDefaultConfiguration(realmConfiguration);