Android 未在特定设备品牌ZTE-Z982 N9560上获取SQLite表
我们得到的SQLite异常是“找不到这样的表”。此问题仅在中兴通讯(Z982和N95630)品牌的设备上报告。在所有其他设备上,DB工作正常,因此无法复制。数据库路径有问题吗 下面是我们正在使用的SQLite助手类Android 未在特定设备品牌ZTE-Z982 N9560上获取SQLite表,android,sqliteopenhelper,Android,Sqliteopenhelper,我们得到的SQLite异常是“找不到这样的表”。此问题仅在中兴通讯(Z982和N95630)品牌的设备上报告。在所有其他设备上,DB工作正常,因此无法复制。数据库路径有问题吗 下面是我们正在使用的SQLite助手类 public ExternalDbOpenHelper( Context context, String databaseName ) { super( context, databaseName, null, DB_VERSION ); this.context =
public ExternalDbOpenHelper( Context context, String databaseName ) {
super( context, databaseName, null, DB_VERSION );
this.context = context;
String packageName = context.getPackageName();
DB_PATH = String.format( "//data//data//%s//databases//", packageName );
DB_NAME = databaseName;
openDataBase();
}
创建数据库的方法
public void createDataBase() {
boolean dbExist = checkDataBase();
if ( dbExist ) {
Log.i( this.getClass().toString(), "Database already exists" );
try {
this.getWritableDatabase();
}
catch ( SQLiteReadOnlyDatabaseException sqr ) {
this.getWritableDatabase();
sqr.printStackTrace();
}
}
else if ( !dbExist ) {
try {
this.getWritableDatabase();
}
catch ( SQLiteReadOnlyDatabaseException sqr ) {
this.getWritableDatabase();
sqr.printStackTrace();
}
try {
copyDataBase();
}
catch ( IOException e ) {
e.printStackTrace();
Log.e( this.getClass().toString(), "Copying error" );
}
}
}
dbOpenHelper = new ExternalDbOpenHelper( getActivity(), AppConstants.DB_NAME );
database = dbOpenHelper.openDataBase();
数据库是否存在
private boolean checkDataBase() {
SQLiteDatabase checkDb = null;
try {
String path = DB_PATH + DB_NAME;
File file = new File( path );
if ( file.exists() && !file.isDirectory() ) {
checkDb = SQLiteDatabase.openDatabase( path, null, SQLiteDatabase.OPEN_READWRITE );
}
}
catch ( SQLException e ) {
e.printStackTrace();
Log.e( this.getClass().toString(), "Error while checking db" );
}
if ( checkDb != null ) {
checkDb.close();
}
return checkDb != null;
}
public SQLiteDatabase openDataBase() throws SQLException {
String path = DB_PATH + DB_NAME;
if ( database == null ) {
createDataBase();
database = SQLiteDatabase.openDatabase( path, null, SQLiteDatabase.OPEN_READWRITE );
try {
database.setVersion(DB_VERSION);
}catch (SQLiteDiskIOException dio){
dio.printStackTrace();
database.setVersion(DB_VERSION);
}
}
return database;
}
public void onCreate( SQLiteDatabase db ) {
Log.e( "Node ", "onCreate Database Deleting and Copying latest DB" );
}
DB助手方法
public void onUpgrade( SQLiteDatabase db, int oldVersion, int newVersion ) {
Log.e( "Node ", "onUpgrade Database Deleting and Copying latest DB" );
if ( oldVersion < newVersion ) {
Log.v( "Test", "Within onUpgrade. Old is: " + oldVersion + " New is: " + newVersion );
//getFavorites( db) ;
context.deleteDatabase( DB_NAME );
try {
copyDataBase();
//setFavorites( db );
}
catch ( IOException e ) {
e.printStackTrace();
}
// new BackupDBAsync(context).execute();
}
}
试一试
以前
copyDataBase();
你好,Sandy_4693我也有同样的问题,我的数据库代码(基本上和你的一样)似乎在除中兴之外的所有Android设备上都运行良好。我找不到任何解决方案,你找到这个问题的解决方案了吗?@Wonton no dude,没有找到任何解决方案。你好,你找到这个问题的解决方案了吗?@observer没有,在过去的几天里,谷歌像素也出现了这个问题。我会尝试谷歌的支持。
copyDataBase();