2013-12-23 4 views
0

Мне нужна ваша помощь, я заканчиваю кодирование приложения, но проблема в том, что база данных находится внутри системы: /data/data/your.package.name, я пытаюсь получить доступ к этой базе данных через SDCARD, я уже искать решения в этом форуме, есть много, но я не знаю, как заставить его работать, например:экспорт базы данных на SDCard

  private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> { 
    private final ProgressDialog dialog = new ProgressDialog(ctx); 

    // can use UI thread here 
    protected void onPreExecute() { 
     this.dialog.setMessage("Exporting database..."); 
     this.dialog.show(); 
    } 

    // automatically done on worker thread (separate from UI thread) 
    protected Boolean doInBackground(final String... args) { 

     File dbFile = 
       new File(Environment.getDataDirectory() + "/data/com.mypkg/databases/mydbfile.db"); 

     File exportDir = new File(Environment.getExternalStorageDirectory(), ""); 
     if (!exportDir.exists()) { 
      exportDir.mkdirs(); 
     } 
     File file = new File(exportDir, dbFile.getName()); 

     try { 
      file.createNewFile(); 
      this.copyFile(dbFile, file); 
      return true; 
     } catch (IOException e) { 
      Log.e("mypck", e.getMessage(), e); 
      return false; 
     } 
    } 

    // can use UI thread here 
    protected void onPostExecute(final Boolean success) { 
     if (this.dialog.isShowing()) { 
      this.dialog.dismiss(); 
     } 
     if (success) { 
      Toast.makeText(ctx, "Export successful!", Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(ctx, "Export failed", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    void copyFile(File src, File dst) throws IOException { 
     FileChannel inChannel = new FileInputStream(src).getChannel(); 
     FileChannel outChannel = new FileOutputStream(dst).getChannel(); 
     try { 
      inChannel.transferTo(0, inChannel.size(), outChannel); 
     } finally { 
      if (inChannel != null) 
      inChannel.close(); 
      if (outChannel != null) 
      outChannel.close(); 
     } 
    } 

} 
+0

Это класс, который я должен добавить другим? и как выполняется ?? –

+1

Имейте это как частный класс внутри своего класса активности. Создать экземпляр: ExportDatabaseFileTask task = new ExportDatabaseFileTask(). Выполните его: task.execute. – NigelK

+0

Большое спасибо за ответ, класс whish? главный ? или адаптер базы данных ??? –

ответ

2

Это может полезно для вас.

File f=new File("/data/data/YOURAPPPACKAGENAME/databases/YOURDATABASENAME"); 
         FileInputStream fis=null; 
        FileOutputStream fos=null; 

        try 
        { 
         fis=new FileInputStream(f); 
         fos=new FileOutputStream("YOURSDCARDFOLDERPATH"+"/YOUREXPORTDDATBASENAME"); 
         while(true) 
         { 
         int i=fis.read(); 
         if(i!=-1) 
         {fos.write(i);} 
         else 
         {break;} 
         } 
         fos.flush(); 
         Toast.makeText(ctx, "DB dump OK", Toast.LENGTH_LONG).show(); 
        } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
         Toast.makeText(ctx, "DB dump ERROR", Toast.LENGTH_LONG).show(); 
        } 
        finally 
        { 
         try 
         { 
         fos.close(); 
         fis.close(); 
         } 
         catch(Exception ioe) 
         {} 
        } 

Вы должны добавить SDCard чтения и записи в файл manifest.xml и после того, как база данных успешно экспортируются вы можете вытащить эту базу данных с помощью инструментов DDMS в ваш компьютер и открыты с помощью SQLite Manager.

+0

, поскольку я сказал вам, прежде чем проблема не о коде, это повсюду, но как его использовать, например, где поставить этот код в действие, то есть мою проблему. спасибо другу за ваши усилия :) –

+1

Вы просто прямо вставляете этот код в свою кнопку click listner event onclick() и/или если вы хотите реализовать это в AsyncTask, вы можете поместить этот код в InBackground(). Это очень легко. –

+0

Я очень благодарен за ваш вклад, я думал, что это сложнее, спасибо. –

Смежные вопросы