2016-06-02 6 views
5

Ich bin unten Störung zu erhalten:nicht in der Lage Datenbank zu öffnen, in der Lese-/Schreibmodus

not an error (code 0): Could not open the database in read/write mode.

I

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

hinzugefügt Ich versuche, Daten in der Datenbank eingeben, die in der Gegenwart SD-Karte, kann ich die Daten, die bereits in der Datenbank vorhanden sind, über "OPEN_READONLY" lesen. Ich bekomme einen Fehler bei der Verwendung von "OPEN_READWRITE"

+0

Welche Android-Version? Wo ist auf der SD-Karte die Datenbank? Mit welchem ​​Code öffnest du die Datenbank? Ist die SD-Karte schreibgeschützt? – StenSoft

+0

Wie überprüfen wir, ob die SD-Karte schreibgeschützt ist? –

+0

Der SD-Karteneintrag in '/ proc/mounts' hat' rw' Flag – StenSoft

Antwort

2

Ihre Frage ist nicht so klar, aber ich werde versuchen zu antworten.

Höchstwahrscheinlich Ihre Datenbank entweder:

  1. noch nicht vorhanden sind, und Sie haben es zu schaffen;
  2. Ihre database file is read only, müssen Sie es ändern (This question könnte verwandt sein).

Für # 2, statt SQLiteOpenHelper#getReadableDatabase() zu verwenden, verwenden SQLiteOpenHelper#getWritableDatabase


Wenn Ihre Datenbank auf einem externen Speichereinheit ist, haben Sie ein paar andere Dinge zu überprüfen:

  1. Ist der externe Speicher derzeit gemountet? Wenn nicht, können Sie nicht auf die Datenbank zugreifen.
  2. Ist es als schreibgeschützt montiert? Wenn ja, müssen Sie das ändern.
  3. Haben Sie den Pfad überprüft? Ist es richtig?

Das Problem könnte auf einem dieser Themen sein.

Um zu überprüfen, ob es als schreibgeschützt gemountet ist, versuchen Sie Folgendes:

/* 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; 
} 

von here genommen.

Für weitere Informationen über die Environment Klasse, bitte refer to the docs.

+0

Ich konnte lesen/schreiben, wenn meine Datenbank war im internen Speicher des Telefons vorhanden. –

+0

Sie versuchen also, eine Datenbank auf einer SD-Karte zu verwenden? – Mauker

+0

Ja, ich versuche eine Datenbank zu verwenden, die auf einer SD-Karte vorhanden ist. –

0

Mit Version 4.4 KitKat wurden einige Änderungen eingeführt, die sich auf die Speicher- und Datensicherheit von Android beziehen.

Zum Beispiel, auch wenn True zurückgibt, können Sie nicht auf externe SD-Karte schreiben, sondern nur in das Verzeichnis, das von Environment.getExternalStorageDirectory() zurückgegeben wird.

/* 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; 
} 

Um in der Lage sein, zu löschen, schreiben, Verschieben von Dateien Sie den Speicherzugriffsrahmen verwenden, die Sie Dateien auf dem Handy direkt zugreifen kann, sondern auch alle Remote-Dateien wie zum Beispiel Dateien in Google Drive.

eine Datenbank öffnen Sie einen Pfad zur Verfügung zu stellen, aber die Api Document Provider können Sie nur einen Input Stream öffnen oder Dateien bewegen, so, um eine Datenbank öffnen Sie die Datei zu einem gewissen privaten internen verschieben/kopieren müssen Speicher oder zu Environment.getExternalStorageDirectory() Verzeichnis.

Mehr Informationen zu diesem Thema:

https://developer.android.com/guide/topics/providers/document-provider.html

https://stackoverflow.com/a/43317703/1502079

https://stackoverflow.com/a/21674485/1502079