web-dev-qa-db-fra.com

Comment visualiser mon fichier de domaine dans le navigateur de domaine?

Je viens de découvrir Realm et je voulais l'explorer plus en détail. J'ai donc décidé de créer un exemple d'application et de le gâcher. Jusqu'ici tout va bien.

Cependant, je n'ai pas encore trouvé de solution pour savoir comment afficher ma base de données dans le navigateur de domaines. Comment cela peut-il être fait?

119
Andy Joyce

Actuellement, le navigateur de domaines ne prend pas en charge l'accès aux bases de données directement sur le périphérique. Vous devez donc copier la base de données à partir de l'émulateur/du téléphone pour l'afficher. Cela peut être fait en utilisant ADB:

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

Cette commande extraira tous les fichiers de domaines créés avec Realm.getInstance(new RealmConfiguration.Builder().build()). La base de données par défaut s'appelle default.realm.

Notez que cela ne fonctionnera que sur un émulateur ou si le périphérique est enraciné.

125
Christian Melchior

Vous pouvez maintenant afficher la base de données Realm sur le navigateur Chrome à l'aide de Stetho , développé par Facebook. Par défaut, Stetho permet de visualiser les préférences SQLite, réseau, partagées, mais avec un supplément de plugin ici , permet également de visualiser le Royaume.

Après avoir configuré votre classe Application avec les bibliothèques ci-dessus, alors que l'application est en cours d'exécution et connectée, ouvrez le navigateur Chrome et naviguez chrome://inspect pour voir


enter image description here

Puis Resources->Web Sql->default.realm


enter image description here

101
Jemshit Iskenderov

Vous pouvez également extraire votre fichier de tout périphérique non root à l'aide du shell ADB et de la commande run-as.

Vous pouvez utiliser ces commandes pour extraire de la mémoire privée de votre application une base de données nommée nom_fichier_database_database située dans le dossier de fichiers:

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"
53
Apperside

Si vous êtes paresseux pour obtenir chaque fois le fichier de base de données realm avec adb, vous pouvez ajouter une fonction d'exportation à votre code Android, qui vous envoie un courrier électronique avec le fichier de base de données realm en pièce jointe.

Voici un exemple:

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"));
}

N'oubliez pas d'ajouter cette autorisation utilisateur à votre fichier manifeste Android:

    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
52
ruclip

Pour Android (inutile de rooter votre appareil)

Pour obtenir une copie d'une base de données Realm sur votre appareil, accédez à Explorateur de fichiers de l'appareil dans Android Studio.

Naviguez jusqu'à /data/data/your.package.name/files/.

Vous y trouverez vos fichiers * .realm. Faites un clic droit, puis Enregistrer sous . Assurez-vous de synchroniser avant de les enregistrer.

Utilisez navigateur de royaume ou n’importe lequel de ceux-ci pour afficher les fichiers * .realm:

Enter image description here

21
devilsbane

Il y a une solution de contournement. Vous pouvez accéder directement au fichier à partir du moniteur du périphérique. Vous pouvez accéder à ce répertoire uniquement lorsque vous utilisez un émulateur ou un périphérique racine.

Dans Android Studio:

Sélectionnez

Menu Outils Android Moniteur d'appareil Android Explorateur de fichiers données données → (Nom de votre package) → fichiers → * db.realm

Extrayez ce fichier du périphérique:

Enter image description here

De Android Studio 3, canary 1, l'explorateur de fichiers de périphériques a été introduit. Vous devez regarder le fichier de domaine ici. Ensuite, (sélectionnez votre package) → sélectionnez le fichier de domaine → cliquez avec le bouton droit de la souris et enregistrez.

Enter image description here

Et ouvrez le fichier dans le navigateur de domaines. Vous pouvez voir vos données maintenant.

17
Aveek

Vous pouvez accéder directement au fichier de domaine. Voici la solution que j'ai utilisée.

Tout d'abord, vous pouvez copier le fichier de domaine situé dans '/ data/data/packagename/files' dans 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();
}

Deuxièmement, utilisez l'outil ADB pour extraire ce fichier comme ceci:

$ adb pull /sdcard/default.realm.

Vous pouvez maintenant ouvrir le fichier dans le navigateur de domaines.

14
Rooney

Voici une solution qui n'exige pas que votre téléphone soit enraciné, en utilisant la commande run-as présente dans le shell de adb. La seule condition préalable est qu'une version de débogage de votre application soit installée sur le téléphone cible.

$ 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

Vous aurez une copie de la base de données à partir de n’importe quel téléphone de votre répertoire local, que vous pourrez ensuite charger sur le navigateur de domaines.

5

Vous pouvez maintenant y accéder directement si vous utilisez un émulateur.

Premier Enregistrez le chemin où se trouve le fichier dans l'émulateur comme @bmunk dit:

Log.d(TAG, "path: " + realm.getPath());

Second Recherchez-le et faites un clic droit sur le fichier et choisissez "Enregistrer sous", dans la boîte de dialogue apparaît l'itinéraire où se trouve réellement le fichier dans votre système .

enter image description hereYou can copy the route from the Save As dialog

Ensuite, collez simplement la route dans la boîte de dialogue "Ouvrir un fichier local" de Realm Studio.

(J'ai testé cela sous Windows uniquement)

2
Brugui

Voici mon script Shell prêt à l'emploi. Il suffit de changer le nom du paquet et vos chemins adb, le script fera le nécessaire.

#!/bin/sh
ADB_PATH="/Users/medyo/Library/Android/sdk/platform-tools"
PACKAGE_NAME="com.mobiacube.elbotola.debug"
DB_NAME="default.realm"
DESTINATION_PATH="/Users/Medyo/Desktop/"
NOT_PRESENT="List of devices attached"
ADB_FOUND=`${ADB_PATH}/adb devices | tail -2 | head -1 | cut -f 1 | sed 's/ *$//g'`
if [[ ${ADB_FOUND} == ${NOT_PRESENT} ]]; then
    echo "Make sure a device is connected"
else
    ${ADB_PATH}/adb Shell "
        run-as ${PACKAGE_NAME} cp /data/data/${PACKAGE_NAME}/files/${DB_NAME} /sdcard/
        exit
    "
    ${ADB_PATH}/adb pull "/sdcard/${DB_NAME}" "${DESTINATION_PATH}"
    echo "Database exported to ${DESTINATION_PATH}${DB_NAME}"
fi

Plus de détails sur cet article de blog: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-Android/

1
Mehdi

Garder les choses simples:

/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm

Explication:

  1. Trouvez le chemin de votre installation adb. Si vous utilisez Android Studio, consultez Fichier> Structure du projet> Emplacement du SDK> Android Emplacement du SDK et ajoutez platform-tools à ce chemin.
  2. Utilisez le nom complet de votre application pour l'argument run-as
  3. Décidez où vous voulez copier le fichier de royaume

NB: Le fichier s'appelle default.realm car je n’ai pas changé son nom lors de sa configuration - le vôtre peut être différent.

1
Inti

Vous avez peu d'options pour afficher vos fichiers de domaine Android:

  1. Comme @Christian Melchior a déclaré que vous pouvez extraire votre base de données de royaume de l’appareil et l’ouvrir sur votre mac à l’aide de navigateur OSX Realm

  2. Vous pouvez utiliser un tiers navigateur de royaume Android que j’ai créé pour faciliter le développement de Android avec le royaume. L'application vous montrera tous les fichiers de royaume sur votre appareil et vous pourrez voir tous vos fichiers de royaume en temps réel tout en testant votre application.

  3. Vous pouvez utiliser le navigateur Chrome Stetho La description complète de l'utilisation de Setho est fournie par @Jemshit Iskendero answer.

1
SocialError

Voici un shell pour les paresseux comme moi :)

Le fichier .realm sera stocké dans le dossier tmpRealm/ à côté du fichier .sh.

#!/bin/sh
adb Shell 'su -c "
cd /data/data/<packagename>/files
ls
rm -rf /data/local/tmp/tmpRealm/
mkdir /data/local/tmp/tmpRealm/
cp /data/data/com.arefly.sleep/files/* /data/local/tmp/tmpRealm
chown Shell.shell /data/local/tmp/tmpRealm/*
"'
rm -rf ./tmpRealm/
adb pull /data/local/tmp/tmpRealm ./

Ou si vous préférez laisser tmpRealm/ être sur la carte SD:

#!/bin/sh
adb Shell 'su -c "
cd /data/data/com.arefly.sleep/files
ls
mount -o rw,remount $EXTERNAL_STORAGE/
rm -rf $EXTERNAL_STORAGE/tmpRealm
mkdir $EXTERNAL_STORAGE/tmpRealm
cp /data/data/com.arefly.sleep/files/* $EXTERNAL_STORAGE/tmpRealm
"'
rm -rf ./tmpRealm/
# http://unix.stackexchange.com/a/225750/176808
adb pull "$(adb Shell 'echo "$EXTERNAL_STORAGE"' | tr -d '\r')/tmpRealm" ./

Référence:

  1. https://stackoverflow.com/a/28486297/26032
  2. https://Android.stackexchange.com/a/129665/17972
0
He Yifei 何一非