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.
请注意,这仅适用于模拟器或设备已植根.
Jem*_*rov 103
现在,您可以使用Facebook开发的Stetho在Chrome浏览器上查看Realm DB .默认情况下,Stetho允许查看Sqlite,网络,共享偏好,但这里有额外的插件允许查看Realm.
Application使用上述库配置您的课程后,当应用程序正在运行并连接时,请打开Chrome浏览器并导航chrome://inspect以查看
然后 Resources->Web Sql->default.realm
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)
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)
Ave*_*eek 18
有一个解决方法.您可以直接从设备监视器访问该文件.只有在使用模拟器或root设备时才能访问此目录.
在Android Studio中:
选择
菜单工具 → Android → Android设备监控 → 文件浏览器 → 数据 → 数据 →(您的包名称)→ 文件 →*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)
您将从本地目录中的任何手机获得数据库的副本,然后可以将其加载到领域浏览器中.
| 归档时间: |
|
| 查看次数: |
87849 次 |
| 最近记录: |