2013-04-02 8 views
0

я пытаюсь сделать резервное копирование функции в мое приложение, но оно дает силы, близкую ошибкурезервное копирование базы данных на карту памяти

может любой дать некоторое представление о том, что случилось в моем коде

Просьба помочь мне

вот мой код

public class Mydatabase { 

private String appName = ""; 
    private String packageName = ""; 
    public static final String DATABASE_NAME = "data.db"; 
    public boolean backup() { 
    boolean rc = false; 

    boolean writeable = isSDCardWriteable(); 
    if (writeable) { 
     File file = new File(Environment.getDataDirectory() + "/data/" + packageName + "/databases/" + DATABASE_NAME); 

     File fileBackupDir = new File(Environment.getExternalStorageDirectory(), appName + "/backup"); 
     if (!fileBackupDir.exists()) { 
     fileBackupDir.mkdirs(); 
     } 

     if (file.exists()) { 
     File fileBackup = new File(fileBackupDir, DATABASE_NAME); 
     try { 
      fileBackup.createNewFile(); 
      FileUtils..copyFile(file, fileBackup); 
      rc = true; 
     } catch (IOException ioException) { 
      // 
     } catch (Exception exception) { 
      // 
     } 
     } 
    } 

    return rc; 
    } 

    private boolean isSDCardWriteable() { 
    boolean rc = false; 

    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     rc = true; 
    } 

    return rc; 
    } 

    public Mydatabase(final Context context, final String appName) { 
     this.appName = appName; 
     packageName = context.getPackageName(); 
    } 

}

это мой журнал

04-03 00:39:18.595: E/AndroidRuntime(674): FATAL EXCEPTION: main 
04-03 00:39:18.595: E/AndroidRuntime(674): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.neelrazin.noteit/com.neelrazin.noteit.Mydatabase}: java.lang.InstantiationException: com.neelrazin.noteit.Mydatabase 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.os.Looper.loop(Looper.java:123) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-03 00:39:18.595: E/AndroidRuntime(674): at java.lang.reflect.Method.invokeNative(Native Method) 
04-03 00:39:18.595: E/AndroidRuntime(674): at java.lang.reflect.Method.invoke(Method.java:507) 
04-03 00:39:18.595: E/AndroidRuntime(674): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-03 00:39:18.595: E/AndroidRuntime(674): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-03 00:39:18.595: E/AndroidRuntime(674): at dalvik.system.NativeStart.main(Native Method) 
04-03 00:39:18.595: E/AndroidRuntime(674): Caused by: java.lang.InstantiationException: com.neelrazin.noteit.Mydatabase 
04-03 00:39:18.595: E/AndroidRuntime(674): at java.lang.Class.newInstanceImpl(Native Method) 
04-03 00:39:18.595: E/AndroidRuntime(674): at java.lang.Class.newInstance(Class.java:1409) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
04-03 00:39:18.595: E/AndroidRuntime(674): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
04-03 00:39:18.595: E/AndroidRuntime(674): ... 11 more 
+0

Почему вы редактируете свой код .. Он должен быть доступен для чтения – Pragnani

+0

Добавили ли вы разрешение на запись в манифест? –

+0

no какое разрешение я не знаю ... – neel

ответ

0

микропримесей точки пальцем на то, что вы пытаетесь запустить Activity называется Mydatabase. Как видно из фрагмента кода, Mydatabase не распространяется Activity. Система ищет Activity для запуска, а не класс, который происходит только от Object.

+0

Я получаю этот код формы этого сайта не продлевает деятельность – neel

+0

Я бы посоветовал вам прочитать о программировании Android. – James

+0

Вы не можете мне помочь в этом ??? – neel

3

Вы, кажется, немного потеряны. Вот функциональный метод резервного копирования базы данных, вы можете поместить его в любой класс.

public static void backupDatabase() throws IOException { 
    //Open your local db as the input stream 
    String inFileName = "/data/data/com.android.exemple/databases/databename.db"; 
    File dbFile = new File(inFileName); 
    FileInputStream fis = new FileInputStream(dbFile); 

    String outFileName = Environment.getExternalStorageDirectory()+"/database.db"; 
    //Open the empty db as the output stream 
    OutputStream output = new FileOutputStream(outFileName); 
    //transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = fis.read(buffer))>0){ 
     output.write(buffer, 0, length); 
    } 
    //Close the streams 
    output.flush(); 
    output.close(); 
    fis.close(); 
} 

Вам нужно добавить эту строку в манифесте перед нанесением элемента

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

Не забудьте изменить имя пакета в переменной inFileName и DatabaseName на обоих месте.

+0

@ Stephane: Я пытался, как вы сказали, но ничего не произошло. Он просто показывает обычный экран при нажатии на кнопку «BackUp». Можете ли вы объяснить, почему это происходит? – neel

+0

Этот metof ничего не отображает на экране, но если вы посмотрите на корень вашей SD-памяти, вы увидите файл database.db. –