0

为了导出我的领域文件,我使用了下一个代码:

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 并没有看到任何物体!但在导出之前,我看到了七个不同的领域对象。但是,库本身具有相同的大小。我究竟做错了什么?

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

        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 {
     }

这种方法有助于导入文件,但新文件我不能使用它。因为我没有看到我的对象。

4

2 回答 2

1

你用assetFile错了方法。您引用的是内部设备位置.assetFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()),而导出的 Realm 应位于assetsAPK 的文件夹中。同时指定 aname将创建一个新的(空的)领域。

请尝试以下配置。

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

您的 APK:

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

于 2017-08-04T11:44:22.370 回答
0
.assetFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath())

应该

.directory(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM))
于 2017-08-04T11:46:55.533 回答