导出或导入后,Realm库找不到Realm Objects

时间:2017-08-01 14:54:49

标签: android realm stetho

要导出我的领域文件我正在使用下一个代码:

File exportRealmFile;
            exportRealmFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "default.realm");
getRealm().writeCopyTo(exportRealmFile);

之后我试图导入这个文件。我打开Android Monitor并将文件推送到另一台设备上。

但是当我想获得RealmObject时,例如,StatObject我看到对象大小是0.但我知道大小不是0.

 RealmResults<StatObject> statObjects =
                                realmForThisThread.where(StatObject.class).findAll();
LOG.debug("Size "+statObjects.size());

我打开Stetho,我看不到任何物体!但在出口之前,我看到了七个不同的领域对象。但是,库本身具有相同的大小。我做错了什么?

我正在尝试使用以下方法导入realm文件:

        RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
                .name("Realmexport.realm")
                .assetFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath())
                .build();
       // Realm.setDefaultConfiguration(realmConfiguration);

但没有改变。

导入文件:

File oldRealmFile = new File(getRealm().getPath());
File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) ,"default.realm");
 FileOutputStream outputStream=null;
 FileInputStream inputStream=null;
 try {
     outputStream = new FileOutputStream(oldRealmFile);
     inputStream = new FileInputStream(newFile);
     byte[] buf = new byte[1024];
     int bytesRead;
     while ((bytesRead = inputStream.read(buf)) > 0) {
        outputStream.write(buf, 0, bytesRead);
     }
     outputStream.close();
     inputStream.close();
     }catch (IOException exc){
             exc.printStackTrace();
     }finally {
     }

这种方法有助于导入文件,但新文件我无法使用它。因为我没有看到我的物体。

2 个答案:

答案 0 :(得分:1)

您以错误的方式使用assetFile。您引用了内部设备位置.assetFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()),而导出的Realm应位于APK的assets文件夹中。同时指定name将创建一个新的(空)Realm。

请尝试以下配置。

RealmConfiguration config = new RealmConfiguration.Builder().assetFile("myExported").build();

你的APK:

└── src └── main ├── AndroidManifest.xml ├── assets │   └── myExported.realm ├── java └── res

答案 1 :(得分:0)

.assetFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath())

应该是

.directory(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM))