2012-10-22 3 views
1

J'utilise ce code ci-dessous pour copier ma base de données sur le stockage interne, mais il ne m'aide pas et toujours obtenir cette erreur. Je suis passé par beaucoup de questions et réponses et j'ai essayé beaucoup de poteaux de blog mais suis incapable de le faire fonctionner. Mon téléphone est HTC One XComment faire pour sauvegarder la base de données sqlite sur le stockage interne

J'ai également ajouté une autorisation dans le fichier manifeste

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



public static boolean backUpDataBase(Context context) 
    { 
     String packageName = "com.projectWork.mobile"; 
     try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 

      if (Environment.MEDIA_MOUNTED.equals(sd)) 
      { 
       String currentDBPath = "//data//"+ packageName +"//databases//"+"appDb.db"; 
       String backupDBPath = "appDb.db"; 
       File currentDB = new File(data, currentDBPath); 
       File backupDB = new File(sd, backupDBPath); 

       FileChannel src = new FileInputStream(currentDB).getChannel(); 
       FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
       Toast.makeText(context, backupDB.toString(), Toast.LENGTH_LONG).show(); 

      } 
     } catch (Exception e) { 

      Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show(); 


     } 

     return true; 
    } 

C'est l'erreur que je reçois

java.io.FileNotFoundException:/mnt/sdcard/appDb.db: ouvert a échoué: EROFS (lecture seule système de fichiers)

S'il vous plaît gui Comme je veux stocker toutes mes erreurs dans la base de données afin que nous puissions les analyser plus tard.

Merci

+0

pourquoi le double '//'? l'erreur vient de votre carte SD étant monté en lecture seule, il semblerait. Je ne suis pas sûr de cette chose FileChannel. peut-être fileinput/outputstream simple fonctionnerait mieux? – njzk2

+0

vous avez raison, le problème vient quand j'essaie d'écrire le fichier dans la carte SD puis il dit erreur readonly. ...veuillez suggérer. Mon mobile n'est pas enraciné et je ne veux pas faire cela non plus – Shax

+2

commencez par essayer de créer un fichier en l'écrivant simplement sur la carte SD. c'est peut-être quelque chose de stupide comme si la carte SD était verrouillée. – njzk2

Répondre

1

Essayez de cette façon. Ça marche de mon côté.

String currentDBPath = "\\data\\"+ packageName +"\\databases\\"+"appDb.db"; 

Suivez également this post

Merci.

+2

N'utilisez JAMAIS un chemin statique comme celui-là. Utilisez 'context.getDatabasePath (DataBaseHelper.dbName)' à la place. – Ancantus

Questions connexes