SQlite无法在带有phonegap的android 4.4(kitkat)上运行
我正在做一个关于字典的应用程序 在Android 4.3 jellybean之前,它一直运转良好 但在安卓4.4上,应用程序会在数据库方面出错。找不到表 所以,我想有东西在复制到DB文件中 1在onCreate中 我将复制到db文件资产到db位置 保存14个分割文件SQlite无法在带有phonegap的android 4.4(kitkat)上运行,android,database,sqlite,cordova,android-4.4-kitkat,Android,Database,Sqlite,Cordova,Android 4.4 Kitkat,我正在做一个关于字典的应用程序 在Android 4.3 jellybean之前,它一直运转良好 但在安卓4.4上,应用程序会在数据库方面出错。找不到表 所以,我想有东西在复制到DB文件中 1在onCreate中 我将复制到db文件资产到db位置 保存14个分割文件 private void CopyInitialDB() { String path = ""; if(android.os.Build.VERSION.SDK_INT >= 17) {
private void CopyInitialDB() {
String path = "";
if(android.os.Build.VERSION.SDK_INT >= 17)
{
path = "/data/data/"+getPackageName()+"/app_webview/databases/";
}
else
{
path = "/data/data/"+getPackageName()+"/app_database/databases/";
}
File topPath = new File(path);
if ( !topPath.exists() ){
try {
topPath.mkdir();
// try access asset files
AssetManager assetManager = getAssets();
// copy Databases.db
File dbf = new File(path+"Databases.db");
if (dbf.exists()) {
dbf.delete();
}
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("Databases.db");
out = new FileOutputStream(dbf);
copyFile(in, out);
} catch(Exception e) {
Log.e("tag", e.getMessage());
} finally {
in.close();
in = null;
out.flush();
out.close();
out = null;
}
// create folder file__0
File dbPath = new File(path+"file__0");
if ( !dbPath.exists() ){
try {
dbPath.mkdir();
} catch(Exception e) {
Log.e("tag", e.getMessage());
}
}
// copy db files
InputStream[] arrIs = new InputStream[14];
BufferedInputStream[] arrBis = new BufferedInputStream[14];
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try
{
File f = new File(path+"file__0/0000000000000001.db");
//
if(f.exists())
{
f.delete();
f.createNewFile();
}
for(int i = 0; i < arrIs.length; i++)
{
arrIs[i] = assetManager.open("000000000000000" + (i+1) + ".db");
arrBis[i] = new BufferedInputStream(arrIs[i]);
}
fos = new FileOutputStream(f);
bos = new BufferedOutputStream(fos);
int read = -1;
byte[] buffer = new byte[1024];
for(int i = 0; i < arrIs.length; i++)
{
while((read = arrBis[i].read(buffer, 0, 1024)) != -1)
{
bos.write(buffer, 0, read);
}
bos.flush();
}
} catch(Exception e) {
Log.e("tag", e.getMessage());
} finally {
for(int i = 0; i < arrIs.length; i++) {
try{if(arrIs[i] != null) arrIs[i].close();}catch(Exception e){}
try{if(arrBis[i] != null) arrBis[i].close();}catch(Exception e){}
}
try{if(fos != null) fos.close();}catch(Exception e){}
try{if(bos != null) bos.close();}catch(Exception e){}
arrIs = null;
arrBis = null;
}
} catch(Exception e) {
Log.e("tag", e.getMessage());
}
}
}
我正试图为安卓4.4做些准备
1更改了数据库路径:如下所示,路径=/data/data/+getPackageName+//app_webview/databases/;
或
path=/data/data/+getPackageName+/databases/
2升级cordova 3.5phonegap并添加SQLite pulgin
->测试很好,但他们说Android 4.4T.T中存在问题
3设置为webwiew如下
->但是,在4.4中不起作用
所以。。。。最后,我不能在Android 4.4和Phonegap 3.5中使用SQLite。。。对吧?
但是,我只需要使用数据库选择功能
此应用程序只是加载数据并在屏幕上查看
这很简单
所以,请,任何人修复sqlite问题的方式或建议其他方式
还是我遗漏了什么
我有三天睡不着。。关于这个问题。T.T
谢谢,我做了一些
String dbfullname = "/data/data/" + getPackageName + "/app_database/file__0/0000000000000001.db";
File f = new File(dbfullname);
if(f.exists() == false){
dbfullname = "/data/data/" + getPackageName + "/app_webview/databases/file__0/1";
}
//rest of code
因此,在<4.4版本中,它是app_数据库文件夹,而在4.4版本中,它是app_webview文件夹。以上对我来说很有用 欢迎使用堆栈溢出。谢谢你提出了足够详细的问题。我想说的是一个好问题!你解决这个问题了吗?你是如何解决这个问题的?
String dbfullname = "/data/data/" + getPackageName + "/app_database/file__0/0000000000000001.db";
File f = new File(dbfullname);
if(f.exists() == false){
dbfullname = "/data/data/" + getPackageName + "/app_webview/databases/file__0/1";
}
//rest of code