방금 Realm을 발견하고 더 자세히 살펴보고 싶었으므로 샘플 응용 프로그램을 만들고 엉망으로 만들었습니다. 여태까지는 그런대로 잘됐다.
그러나 아직 해결하지 못한 것 중 하나는 Realm Browser에서 데이터베이스를 보는 방법입니다. 이것을 어떻게 할 수 있습니까?
답변
현재 Realm Browser는 장치에서 직접 데이터베이스에 액세스하는 것을 지원하지 않으므로 에뮬레이터 / 전화에서 데이터베이스를 복사하여보아야합니다. ADB를 사용하여 수행 할 수 있습니다.
adb pull /data/data/<packagename>/files/ .
이 명령은를 사용하여 생성 된 모든 Realm 파일을 가져옵니다 Realm.getInstance(new RealmConfiguration.Builder().build())
. 기본 데이터베이스는이라고 default.realm
합니다.
이것은 에뮬레이터에서만 작동하거나 장치가 루팅 된 경우에만 작동합니다.
답변
이제 Facebook에서 개발 한 Stetho를 사용하여 Chrome 브라우저에서 Realm DB를 볼 수 있습니다 . 기본적으로 Stetho에서는 Sqlite, 네트워크, 공유 환경 설정 을 볼 수 있지만 추가 플러그인을 사용하면 Realm도 볼 수 있습니다.
당신 구성한 후 Application
응용 프로그램이 열려 크롬 브라우저와 탐색을 실행하고 연결되어있는 동안 것은, 위의 라이브러리와 클래스를 chrome://inspect
보고
그때 Resources->Web Sql->default.realm
답변
ADB 쉘 및 run-as 명령을 사용하여 루트가 아닌 장치에서 파일을 가져올 수도 있습니다.
다음 명령을 사용하여 파일의 폴더에있는 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"
답변
adb를 사용하여 영역 데이터베이스 파일을 가져올 때마다 게으른 경우 내보내기 기능을 안드로이드 코드에 추가하면 영역 데이터베이스 파일이 첨부 파일로 포함 된 전자 메일을 보낼 수 있습니다.
예를 들면 다음과 같습니다.
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"));
}
이 사용자 권한을 Android Manifest 파일에 추가하는 것을 잊지 마십시오.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
답변
Android의 경우 (기기를 루팅 할 필요 없음)
장치에서 Realm 데이터베이스의 사본을 얻으려면 Android Studio의 장치 파일 탐색기 로 이동하십시오 .
로 이동하십시오 /data/data/your.package.name/files/
.
거기서 * .realm 파일을 찾을 수 있습니다. 마우스 오른쪽 단추를 클릭 한 다음 다른 이름으로 저장을 클릭 하십시오 . 저장하기 전에 반드시 동기화하십시오.
* .realm 파일을 보려면 Realm Browser 또는 이들 중 하나를 사용하십시오 :
답변
해결 방법이 있습니다. 장치 모니터에서 파일에 직접 액세스 할 수 있습니다. 에뮬레이터 또는 루팅 된 장치를 사용하는 경우에만이 디렉토리에 액세스 할 수 있습니다.
Android Studio에서 :
고르다
메뉴 도구 → Android → Android 장치 모니터 → 파일 탐색기 → 데이터 → 데이터 → (귀하의 패키지 이름) → 파일 → * db.realm
장치에서이 파일을 가져옵니다.
Android Studio 3 카나리아 1부터 장치 파일 탐색기가 도입되었습니다. 여기서 영역 파일을 찾아야합니다. 그런 다음 (패키지를 선택하십시오) → 영역 파일을 선택하십시오 → 마우스 오른쪽 버튼을 클릭하고 저장하십시오.
Realm Browser에서 파일을 엽니 다. 이제 데이터를 볼 수 있습니다.
답변
영역 파일에 직접 액세스 할 수 있습니다. 여기 내가 사용한 솔루션이 있습니다.
먼저 ‘/ 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();
}
둘째, ADB 도구를 사용하여 다음과 같이 해당 파일을 가져옵니다.
$ adb pull /sdcard/default.realm.
이제 Realm Browser에서 파일을 열 수 있습니다.