如何在领域浏览器中查看我的Realm文件?

And*_*yce 121 java android realm

我刚刚发现了Realm,并且想要更详细地探索它,所以我决定创建示例应用程序并搞乱它.到现在为止还挺好.

但是,我还没有解决的一件事是如何在Realm Browser中查看我的数据库.如何才能做到这一点?

Chr*_*ior 126

目前,Realm Browser不支持直接在设备上访问数据库,因此您需要从模拟器/手机中复制数据库以进行查看.这可以通过使用ADB来完成:

adb pull /data/data/<packagename>/files/ .

该命令将拉取使用的所有Realm文件Realm.getInstance(new RealmConfiguration.Builder().build()).调用默认数据库default.realm.

请注意,这仅适用于模拟器或设备已植根.

  • 所以Realm Browser for Mac没用.谁使用模拟器 (39认同)
  • 您还可以使用以下命令记录应用程序的确切路径:Log.d("","path:"+ realm.getPath()); (25认同)
  • 对于非root设备,此脚本可以运行:https://gist.github.com/jk2K/a66ed67b252b880824b32dd4952d1b39 (9认同)
  • 如果在获取realm文件之前遇到文件未找到错误,请先执行adb root命令. (2认同)

Jem*_*rov 103

现在,您可以使用Facebook开发的Stetho在Chrome浏览器上查看Realm DB .默认情况下,Stetho允许查看Sqlite,网络,共享偏好,但这里有额外的插件允许查看Realm.

Application使用上述库配置您的课程后,当应用程序正在运行并连接时,请打开Chrome浏览器并导航chrome://inspect以查看


在此输入图像描述

然后 Resources->Web Sql->default.realm


在此输入图像描述

  • 您是否添加了网址"https:// github.com/uPhyca/stetho-realm/raw/master/maven-repo",如下所示https://github.com/uPhyca/stetho-realm (4认同)
  • 无法解决:com.uphyca:stetho_realm:0.8.0任何人都可以帮我这个吗?对不起,我不是一个mac用户,所以看起来这种方式是我唯一可以浏览我的数据库文件. (2认同)
  • 我的错,非常感谢你!我错过了这个.现在它可以正常工作! (2认同)

App*_*ide 56

您还可以使用ADB shell和run-as命令从任何非root用户设备中提取文件.

您可以使用这些命令从应用程序的专用存储中提取位于files文件夹中的名为your_database_file_name的数据库:

adb shell "run-as package.name chmod 666 /data/data/package.name/files/your_database_file_name"

// For devices running an android version lower than Android 5.0 (Lollipop)
adb pull /data/data/package.name/files/your_database_file_name

// For devices running an Android version equal or grater
// than Android 5.0 (Lollipop)
adb exec-out run-as package.name cat files/your_database_file_name > your_database_file_name
adb shell "run-as package.name chmod 600 /data/data/package.name/files/your_database_file_name"
Run Code Online (Sandbox Code Playgroud)

  • 同意.由于我们可以将应用程序设置为可调试,因此我们可以在没有root的情况下使用它来提取文件. (3认同)

ruc*_*lip 52

如果你每次使用adb都懒得获取领域数据库文件,你可以在你的android代码中添加一个导出函数,它会向你发送一封带有领域数据库文件作为附件的电子邮件.

这是一个例子:

public void exportDatabase() {

    // init realm
    Realm realm = Realm.getInstance(getActivity());

    File exportRealmFile = null;
    try {
        // get or create an "export.realm" file
        exportRealmFile = new File(getActivity().getExternalCacheDir(), "export.realm");

        // if "export.realm" already exists, delete
        exportRealmFile.delete();

        // copy current realm to "export.realm"
        realm.writeCopyTo(exportRealmFile);

    } catch (IOException e) {
        e.printStackTrace();
    }
    realm.close();

    // init email intent and add export.realm as attachment
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("plain/text");
    intent.putExtra(Intent.EXTRA_EMAIL, "YOUR MAIL");
    intent.putExtra(Intent.EXTRA_SUBJECT, "YOUR SUBJECT");
    intent.putExtra(Intent.EXTRA_TEXT, "YOUR TEXT");
    Uri u = Uri.fromFile(exportRealmFile);
    intent.putExtra(Intent.EXTRA_STREAM, u);

    // start email intent
    startActivity(Intent.createChooser(intent, "YOUR CHOOSER TITLE"));
}
Run Code Online (Sandbox Code Playgroud)

不要忘记将此用户权限添加到Android Manifest文件中:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用**Pushbullet**,这是特别好的.然后,您可以将消息推送到Chrome浏览器,然后下载该文件.然后可以在Realm Browser中打开该文件 (2认同)

krh*_*esh 24

对于Android(rooted和unrooted)

要获取设备上任何Realm数据库的副本,请转到Android Studio中的设备文件资源管理器.

导航到/data/data/your.package.name/files/.

在那里你会找到你的*.realm文件.右键单击,然后单击另存为.确保在保存之前进行同步.

使用领域浏览器或任何这些可查看*.realm文件:

在此输入图像描述

  • 如此简单的解决方案,现在应该是答案 (2认同)

Ave*_*eek 18

有一个解决方法.您可以直接从设备监视器访问该文件.只有在使用模拟器或root设备时才能访问此目录.

在Android Studio中:

选择

菜单工具AndroidAndroid设备监控文件浏览器数据数据 →(您的包名称)→ 文件 →*db.realm

从设备中提取此文件:

在此输入图像描述

从Android Studio 3 canary 1开始,已经引入了Device File Explorer.你需要在这里查看领域文件.然后,(选择您的包裹)→选择领域文件→右键单击并保存.

在此输入图像描述

并将文件打开到Realm Browser中.您现在可以看到您的数据.


小智 14

您可以直接访问领域文件.这是我用过的解决方案.

首先,您可以将位于'/ data/data/packagename/files'中的领域文件复制到Environment.getExternalStorageDirectory()+'/ FileName.realm':

public class FileUtil {
    public static void copy(File src, File dst) throws IOException {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}

Realm realm = null;
try {
    realm = Realm.getInstance(this);
        File f = new File(realm.getPath());
        if (f.exists()) {
            try {
                FileUtil.copy(f, new File(Environment.getExternalStorageDirectory()+"/default.realm"));
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
}
finally {
    if (realm != null)
        realm.close();
}
Run Code Online (Sandbox Code Playgroud)

其次,使用ADB工具拉出该文件,如下所示:

$ adb pull /sdcard/default.realm.

现在,您可以在Realm Browser中打开该文件.


小智 5

这是一个解决方案,通过利用shell中run-as存在的命令,不需要将手机植根adb.只有前提条件是您必须在目标手机上安装应用程序的调试版本.

$ adb shell
$ run-as com.yourcompany.yourapp # pwd will return /data/data/com.yourcompany.yourapp
$ cp files/default.realm /sdcard
$ exit
$ exit
$ adb pull /sdcard/default.realm ~/Desktop # or wherever you want to put it
Run Code Online (Sandbox Code Playgroud)

您将从本地目录中的任何手机获得数据库的副本,然后可以将其加载到领域浏览器中.


kuz*_*zdu 5

两年多来,Realm Browser 可用于所有操作系统(mac、linux、windows)。

https://docs.realm.io/sync/realm-studio

直接工作。