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