Je suis en dessous de l'erreur:
pas une erreur (code 0): Impossible d'ouvrir la base de données en mode lecture / écriture. P> blockQquote>
j'ai ajouté p>
xxx pré> J'essaie d'entrer des données dans la base de données présentes dans la carte SD, je suis capable de lire les données qui est déjà présent dans la base de données via "Open_Readonly". Je reçois une erreur lorsque vous utilisez "open_readwrite" p> p>
3 Réponses :
Votre question n'est pas si claire, mais je vais essayer de répondre.
Très probablement, votre base de données soit: p>
pour # 2, au lieu d'utiliser sqliteopenhelper # getreeadableAbase () code>
, utilisez sqliteopenhelper # getwriRhableDatabase code>
p>
Si votre base de données est sur une unité de stockage externe, vous avez quelques autres choses à vérifier : p>
Le problème peut être sur l'un de ces sujets. p>
Pour vérifier s'il est monté en lecture seule, essayez ce qui suit: p>
/* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }
J'ai pu lire / écrire lorsque ma base de données était présente dans le stockage interne du téléphone.
Vous essayez donc d'utiliser une base de données sur une carte SD?
Oui, j'essaie d'utiliser une base de données présente sur une carte SD
Je suis capable d'utiliser la base de données présente sur la carte SD dans Open_Readonly. Pouvez-vous s'il vous plaît dites-moi comment vérifier si elle est montée en lecture seule ou en lecture / écriture?
Édité la réponse.
C'est en écriture capable.
Eh bien ... ma première pensée serait ... pourquoi ne l'utilisez-vous pas sur le stockage interne? Autre chose que j'ai remarquée, vous n'avez besoin que de la permission d'écriture, essayez de supprimer le premier. Et avez-vous vérifié le chemin de la base de données? Est-ce correct?
Je n'utilise pas de stockage interne car je sauvegarde des images comme une blob aussi dans la base de données. J'ai vérifié le chemin et il est correct comme dans toute l'application, je suis capable de récupérer des données de la base de données en mode Open_Readonly.
Et j'ai vérifié isexternalstoragaginable () et ça retourne vrai
@SakshiaGrawal - Comment avez-vous résolu le problème? J'ai le même problème et mon dB est dans la carte SD
avec la version 4.4 kitkat em> Certaines modifications ont été introduites liées à la manière dont Android gère la sécurité de stockage et de la sécurité des données. Par exemple, même si iSexternalStorserverAmable () code> retournera vrai. ne pas être capable d'écrire sur une carte SD externe mais uniquement au répertoire renvoyé par
Environnement.getexternalStoragedirectory () Code>. P>
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
dans API Android 4.3 et plus bas Vous pouvez ouvrir des bases de données dans une carte SD externe, ce code fonctionnait pour lire et écrire: à partir de API 4.4 Vous ne pouvez ouvrir que des bases de données dans SD externes Carte Read_only, vous devez utiliser ce code: P> SQLiteDatabase.openDatabase(DB_PATH, null,SQLiteDatabase.OPEN_READONLY);
Quelle version Android? Où sur la carte SD est la base de données? Quel code utilisez-vous pour ouvrir la base de données? La carte SD est-elle montée en lecture-écriture?
Comment nous vérifions si la carte SD est montée en lecture / écriture?
L'entrée de la carte SD dans
/ proc / montes code> a
rw code> drapeau
Il me semble que vous utilisez
getreadadableatabase () code> au lieu de
getWRITrataBase () code>
Je reçois la même erreur. Avez-vous trouvé une solution pour cela ? Mon dB est dans la carte SD.