Android 如何在sqlite数据库中设置按钮备份/恢复功能?

Android 如何在sqlite数据库中设置按钮备份/恢复功能?,android,sqlite,Android,Sqlite,我想设置按钮点击事件,在SD卡上备份我的应用程序数据。 这是我的代码: shv.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(SecondActivity.this, "backup

我想设置按钮点击事件,在SD卡上备份我的应用程序数据。 这是我的代码:

              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });
我这样说:

              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });
public class MyDatabaseTools {
private String appName = "";
  private String packageName = "";

  public static boolean backup() {
    boolean rc = false;

    boolean writeable = isSDCardWriteable();
    if (writeable) {
      File file = new File(Environment.getDataDirectory() + "/data/<com.example.judgedetail>/databases/ado.db");

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

      if (file.exists()) {
        File fileBackup = new File(fileBackupDir, "ado.db");
        try {
          fileBackup.createNewFile();
          /*Files.copyFile(file, fileBackup);*/  //got error here dis line not work
          rc = true;
        } catch (IOException ioException) {
          //
        } catch (Exception exception) {
          //
        }
      }
    }

    return rc;
  }

  private static boolean isSDCardWriteable() {
    boolean rc = false;

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

    return rc;
  }

    public MyDatabaseTools(final Context context, final String appName) {
        this.appName = appName;
        packageName = context.getPackageName();
    }
公共类MyDatabaseTools{
私有字符串appName=“”;
私有字符串packageName=“”;
公共静态布尔备份(){
布尔rc=false;
布尔可写=isSDCardWriteable();
如果(可写){
File File=新文件(Environment.getDataDirectory()+“/data//databases/ado.db”);
File fileBackupDir=新文件(Environment.getExternalStorageDirectory(),“ADOBOOK”+“/backup”);
如果(!fileBackupDir.exists()){
fileBackupDir.mkdirs();
}
if(file.exists()){
File fileBackup=新文件(fileBackupDir,“ado.db”);
试一试{
fileBackup.createNewFile();
/*Files.copyFile(file,fileBackup);*///此处出现错误dis行不工作
rc=真;
}捕获(IOException IOException){
//
}捕获(异常){
//
}
}
}
返回rc;
}
私有静态布尔值isSDCardWriteable(){
布尔rc=false;
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
rc=真;
}
返回rc;
}
公共MyDatabaseTools(最终上下文、最终字符串appName){
this.appName=appName;
packageName=context.getPackageName();
}
}

              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });
Files.copyFile(文件,文件备份) 这条线出错了。 我该如何解决这个问题? 请帮助。

试试这个:

              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });
public void writeToSD() throws IOException {
        File f=new File("/data/data/com.YourPackageName/databases/DBName");
        FileInputStream fis=null;
        FileOutputStream fos=null;

        try{
            fis=new FileInputStream(f);


            fos=new FileOutputStream("/mnt/sdcard/dump.db");
            while(true){
                int i=fis.read();
                if(i!=-1){
                    fos.write(i);
                }
                else{
                    break;
                }
            }
            fos.flush();

        }
        catch(Exception e){
            e.printStackTrace();

        }
        finally{
            try{
                fos.close();
                fis.close();
            }
            catch(IOException ioe){
                System.out.println(ioe);
            }
        }
    } 

我不知道你从哪里复制的代码,但不是你就是海报遗漏了什么
Files.copyFile()
不是现有的Android API函数,我想这就是您描述的行不工作的原因

              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });
您必须使用另一种方法复制文件,我建议使用以下方法:

              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });

这是运行时错误还是编译时错误?请把你的问题写得更清楚。@HamedShams我想设置按钮单击事件备份数据,从我的应用程序中使用的sqlite数据库…表示应用程序正在运行,并想设置还原按钮,为d用户提供备份。单击按钮我确实使用了上面的备份方法…但是在dis line Files.copyFile(文件,文件备份)中;获取按钮事件调用dis方法时出错??是在单击“是”时调用此方法,或在您希望执行的任何位置调用此方法。您也可以通过单击旁边的勾号来接受答案,这对您有任何帮助。当在“fis”中使用dis代码时出现错误…..dis代码正在emulator上检查…..java.io.FileNotFoundException:/data/data/com.example.judgedetail/databases/adonew.db:open failed:enoint(没有这样的文件或目录)使用真实设备检查它,您需要在模拟器上创建SD卡。
              shv.setOnClickListener(new OnClickListener() {  
                    @Override
                    public void onClick(View arg0) {
                        Toast.makeText(SecondActivity.this, "backup Button press",Toast.LENGTH_LONG).show();
                        boolean rc = MyDatabaseTools.backup();
                        System.out.println(rc);
                        if(rc==true)
                        {
                            Toast.makeText(SecondActivity.this, "backup Successfully",Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(SecondActivity.this, "backup error",Toast.LENGTH_LONG).show();
                        }   
                    }
                });