我已经创建了所有数据库,并且正在使用模拟器,因此使用Android设备监视器可以轻松注入数据库。
但在实际设备中,我必须以编程方式将其从Assets文件夹复制到app目录。我使用了很多代码和类,但是我失败了。 看起来有些代码会复制数据库文件,但文件仍为空。
请建议我将数据库文件从资产复制到设备中的代码,其中包含数据文件中保存在资源文件夹中的所有数据。
这里我正在使用这个文件\
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class AssetDatabaseOpenHelper {
private static final String DB_NAME = "urdu.sqlite";
private Context context;
public AssetDatabaseOpenHelper(Context context) {
this.context = context;
}
public SQLiteDatabase openDatabase() {
File dbFile = context.getDatabasePath(DB_NAME);
if (!dbFile.exists()) {
try {
SQLiteDatabase checkDB = context.openOrCreateDatabase(DB_NAME, context.MODE_PRIVATE, null);
if(checkDB != null){
checkDB.close();
}
copyDatabase(dbFile);
} catch (IOException e) {
throw new RuntimeException("Error creating source database", e);
}
}
return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);
}
private void copyDatabase(File dbFile) throws IOException {
InputStream is = context.getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(dbFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) > 0) {
os.write(buffer);
}
os.flush();
os.close();
is.close();
}
}
请告诉我我做错了什么,以及为什么没有使用app目录中的文件复制数据。它总是空的。请帮我。
注意:我使用的是绿色Dao。
答案 0 :(得分:0)
使用如下路径将其保存在您的设备中
String your_package_name="give your package name here";
String DB_PATH = "/data/data/"+your_package_name"+/databases/";
String outFileName = DB_PATH + copyas;
OutputStream myOutput = new FileOutputStream(outFileName);
这可能会对你有帮助。