2017-02-19 2 views
-1

Comment je peux exporter la base de données SQLite au stockage externe `je suis en train cette méthode mais montrant exceptionComment je peux exporter ma base de données SqlLite SDCard

public void exportdb() { 


    Log.e("data ","export"); 
    File sd=Environment.getExternalStorageDirectory(); 
    File data = Environment.getDataDirectory(); 
    FileChannel source=null; 
    FileChannel destination=null; 
    String currentDBPath = "/data/"+ "com.example.kishababy.myapplication.DataBase" +"/databases/"+ "contactsManager"; 
    String backupDBPath = "contactsManager"; 
    File currentDB = new File(data, currentDBPath); 
    File backupDB = new File(sd, backupDBPath); 
    try { 
     source = new FileInputStream(currentDB).getChannel(); 
     destination = new FileOutputStream(backupDB).getChannel(); 
     destination.transferFrom(source, 0, source.size()); 
     source.close(); 
     destination.close(); 
     Log.e("Toast","befor"); 

     Toast.makeText(getApplicationContext(), "DB Exported!", Toast.LENGTH_LONG).show(); 
    } catch(IOException e) { 
     e.printStackTrace(); 
     Log.e("Exception",e.toString()); 
    } 






} 

Exception lors teasting enter image description here

Répondre

0

Je pense vous devez acquérir ou accorder une autorisation WRITE_EXTERNAL pour votre application (votre téléphone fonctionne sous Android 7.0, ce qui est ma meilleure estimation)

+0

J'ai alredy ajouté cette autorisation –

0

Vous pouvez donner le chemin suivant:

String currentDBPath = "//data//"+ "com.example.kishababy.myapplication.DataBase" +"//databases//"+ "contactsManager"; 

Et Assurez-vous que vous avez ajouté

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></u‌​ses-permission> 

vérifier votre état sdcard premier:

String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
    Log.d("Test", "sdcard mounted and writable"); 
} 
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
    Log.d("Test", "sdcard mounted readonly"); 
} 
else { 
    Log.d("Test", "sdcard state: " + state); 
} 
+0

j'ai alredy ajouté cette autorisation –

+0

Et avez-vous modifié le chemin mentionné? –

+0

Cette méthode est-elle correcte? –

0

utilisation

String currentDBPath = "/data/data/"+ "com.example.kishababy.myapplication.DataBase" +"/databases/"+ "contactsManager"; 

au lieu de

String currentDBPath = "/data/"+ "com.example.kishababy.myapplication.DataBase" +"/databases/"+ "contactsManager"; 

De même, vous devez appeler l'autorisation et vous assurer que vous avez créé la base de données avant d'effectuer une sauvegarde.

Vous pouvez utiliser la suite complète intégration:

  1. Ajouter la permission de l'utilisateur dans votre fichier manifeste pour le stockage

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    
  2. Utilisez cet extrait de code pour la sauvegarde:

    public void exportDb() { 
    try { 
        String inFileName = "/data/data/<com.abc.app>/databases/app.db"; 
    
        File dbFile = new File(inFileName); 
        FileInputStream fis = new FileInputStream(dbFile); 
    
        String outFileName = Environment.getExternalStorageDirectory() + "/app_copy.db"; 
    
        OutputStream output = new FileOutputStream(outFileName); 
    
        byte[] buffer = new byte[1024]; 
        int length; 
        while ((length = fis.read(buffer)) > 0) { 
         output.write(buffer, 0, length); 
        } 
    
        output.flush(); 
        output.close(); 
        fis.close(); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } 
    } 
    
  3. Vérifiez l'autorisation de stockage et la méthode de sauvegarde des appels:

    private void backupData() { 
    if ((ContextCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { 
        ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 11); 
    } else { 
        exportDb(); 
    } 
    

    }

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == 11) { 
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         exportDb(); 
        } 
    } 
    } 
    
+0

je ne sais pas où est le problème montrant la même erreur –

+0

java .io.FileNotFoundException: /data/com.example.kishababy.myapplication.DataBase/databases/contactsManager (Aucun fichier ou répertoire) –

+0

Vous utilisez toujours "/data/com.example.kishababy.myapplication.DataBase/databases/contactsManager ". Pouvez-vous s'il vous plaît essayer avec cette URL: "/data/data/com.example.kishababy.myapplication.DataBase/databases/contactsManager" – Ashiq