2015-01-15 2 views
0

Я пытался создать резервную копию базы данных, однако она всегда возвращает резервную копию. Любая помощь будет оценена по достоинству.Невозможно создать резервную копию на SD-карту

Вот мой код:

общественного класса SettingsFragment расширяет фрагмент {

public SettingsFragment(){} 

    Button btnCreateBU, btnRestoreBU; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_settings, container, false); 
     btnCreateBU = (Button) rootView.findViewById(R.id.crebutton1); 
     btnRestoreBU = (Button) rootView.findViewById(R.id.resbutton2); 


     btnCreateBU.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       exportDB(); 
      } 
     }); 

     btnRestoreBU.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       importDB(); 
      } 
     }); 


     return rootView; 
    } 


    private void importDB() { 
     try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 
       if (sd.canWrite()) { 
       String currentDBPath = "//data//" + "com.my.eclassrecord" 
         + "//databases//" + "data.db"; 
       String backupDBPath = "/Android/data/com.my.eclassrecord/files/"; // From SD directory. 
       File backupDB = new File(data, currentDBPath); 
       File currentDB = 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(getActivity().getApplicationContext(), "Import Successful!", 
        Toast.LENGTH_SHORT).show(); 



     } 
    } catch (Exception e) { 

     Toast.makeText(getActivity().getApplicationContext(), "Import Failed!", Toast.LENGTH_SHORT) 
       .show(); 

    } 
} 

private void exportDB() { 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     File data = Environment.getDataDirectory(); 

     if (sd.canWrite()) { 
      String currentDBPath = "//data//" + "com.my.eclassrecord" 
        + "//databases//" + "data.db"; 
      String backupDBPath = "/Android/data/com.my.eclassrecord/files/"; 
      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(getActivity().getApplicationContext(), "Backup Successful!", 
        Toast.LENGTH_SHORT).show(); 

     } 
    } catch (Exception e) { 

     Toast.makeText(getActivity().getApplicationContext(), "Backup Failed!", Toast.LENGTH_SHORT) 
       .show(); 

    } 
} 


} 

Я также заявили следующие разрешения на мой манифест:

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

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

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

ответ

0

этот код работает для меня!

try { 
    File sd = Environment.getExternalStorageDirectory(); 
    File data = Environment.getDataDirectory(); 

    if (sd.canWrite()) { 
     String currentDBPath = "//data//{package name}//databases//{database name}"; 
     String backupDBPath = "{database name}"; 
     File currentDB = new File(data, currentDBPath); 
     File backupDB = new File(sd, backupDBPath); 

     if (currentDB.exists()) { 
      FileChannel src = new FileInputStream(currentDB).getChannel(); 
      FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
      dst.transferFrom(src, 0, src.size()); 
      src.close(); 
      dst.close(); 
     } 
    } 
} catch (Exception e) { 
} 

Можете ли вы разместить свои сообщения в журнале. это поможет нам решить проблему

0

Я думаю, что вы можете решить проблему следующим образом: -

public DatabaseHandler(Context context) { 
    super(context, "/storage/sdcard0/" 
        + File.separator + "contacts" 
        + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
} 
Смежные вопросы