Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android数据库关闭异常_Android_Database_Sqlite - Fatal编程技术网

Android数据库关闭异常

Android数据库关闭异常,android,database,sqlite,Android,Database,Sqlite,我正在从事一个项目,从web下载数据并将其保存到sqlite数据库。几分钟前,我从一个用户那里收到一个奇怪的服务器异常,该用户说sqlite数据库已经关闭。我只是检查了发生异常的整个文件,我没有调用dbHelper.close()。以下是应用程序崩溃的函数和LogCat消息: public void insertCollectionCountries(JSONObject obj, Context context) { //Insert in collection_countries

我正在从事一个项目,从web下载数据并将其保存到sqlite数据库。几分钟前,我从一个用户那里收到一个奇怪的服务器异常,该用户说sqlite数据库已经关闭。我只是检查了发生异常的整个文件,我没有调用
dbHelper.close()。以下是应用程序崩溃的函数和LogCat消息:

public void insertCollectionCountries(JSONObject obj, Context context) {
    //Insert in collection_countries
    if(RPCCommunicator.isServiceRunning){
    Log.w("","JsonCollection - insertCollectionCountries");
    ContentValues valuesCountries = new ContentValues();

        try {
            collectionId = Integer.parseInt(obj.getString("collection_id"));
            dbHelper.deleteSQL("collection_countries", "collection_id=?", new String[] {Integer.toString(collectionId)});

           JSONArray arrayCountries = obj.getJSONArray("country_availability");
           for (int i=0; i<arrayCountries.length(); i++) {
                   valuesCountries.put("collection_id", collectionId);
                   String countryCode = arrayCountries.getString(i);
                   valuesCountries.put("country_code", countryCode);
                   dbHelper.executeQuery("collection_countries", valuesCountries);
           }
        } catch (JSONException e){
            e.printStackTrace();
        }
    }
}
和我用来插入数据的
dbHelperClass
中的函数:

 public boolean executeQuery(String tableName,ContentValues values){
    return execQuery(tableName,values);
}

private  boolean execQuery(String tableName,ContentValues values){
    sqliteDb = instance.getWritableDatabase();
    sqliteDb.beginTransaction();
    sqliteDb.insert(tableName, null, values);
    sqliteDb.setTransactionSuccessful();
    sqliteDb.endTransaction();
    return true;
}
任何可以关闭我的sqlite数据库的想法,或者是什么导致了这种异常,因为我已经在一些不同Android版本、不同设备(HTC EVO 3D、三星Galaxy Nexus、HTC Desire、LG OPTIMUS PAD、三星Galaxy S2、三星Galaxy Note)的模拟器上测试过这段代码,并且工作正常


提前谢谢

我能想到的最简单的解决方案是在execQuery()的开头调用open(),然后在返回值之前调用close()


让我知道它是否对您有帮助。

如果用户使用的是最新版本的Chrome,则可能是数据库格式不正确,Chrome为您删除了它,也有可能是因为数据库在正常页面卸载过程中关闭,并且针对关闭数据库的事务不再以静默方式失败。

查看关闭数据库的位置。也许在onClose()中。。另外,请查看是否在onResume()或类似的中再次打开它。。
 public boolean executeQuery(String tableName,ContentValues values){
    return execQuery(tableName,values);
}

private  boolean execQuery(String tableName,ContentValues values){
    sqliteDb = instance.getWritableDatabase();
    sqliteDb.beginTransaction();
    sqliteDb.insert(tableName, null, values);
    sqliteDb.setTransactionSuccessful();
    sqliteDb.endTransaction();
    return true;
}