Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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 称呼;在终结器中释放语句。请确保在光标上显式调用close();_Android_Sqlite - Fatal编程技术网

Android 称呼;在终结器中释放语句。请确保在光标上显式调用close();

Android 称呼;在终结器中释放语句。请确保在光标上显式调用close();,android,sqlite,Android,Sqlite,我有两个DB CLSS,一个将DB文件从资产复制到手机 第二个是我一直在进行DB调用,但是在日志中我得到了一个关于我应该关闭光标的错误。这让我感到困惑,因为我所有的调用末尾都有一个cursor.close() 第二组代码: public class DatabaseTools extends Common { private Context context; private SQLiteDatabase db; private DatabaseHelper dbHel

我有两个DB CLSS,一个将DB文件从资产复制到手机

第二个是我一直在进行DB调用,但是在日志中我得到了一个关于我应该关闭光标的错误。这让我感到困惑,因为我所有的调用末尾都有一个cursor.close()

第二组代码:

public class DatabaseTools extends Common {


    private Context context;
    private SQLiteDatabase db;
    private DatabaseHelper dbHelper;
    private Cursor cursor;

    public DatabaseTools(Context context) {
        this.context = context;
        dbHelper = new DatabaseHelper(context);
        db = dbHelper.getWritableDatabase();
    }

    //  MARKS
    public ArrayList<String> getNames(String value) {
                Names = new ArrayList<String>();

                selectStatement = new String[] { DB_COMMON_COL_NAME };
                fromStatement = DB_COMMON_COL_VALUE + " = '" + value + "'";

            cursor = db.query(
                DB_DISTANCE_TABLE_NAME, 
                selectStatement, 
                fromStatement, 
                null, 
                null, 
                null, 
                null);

        int distanceIndex = cursor.getColumnIndex(DB_COMMON_COL_NAME);

        if (cursor.moveToFirst()) {
            do {                
                distanceNames.add(cursor.getString(distanceIndex));

            } while (cursor.moveToNext());
        }
        cursor.close();

        return names;

    }
公共类数据库工具扩展了公共类数据库工具{
私人语境;
专用数据库数据库;
私有数据库助手dbHelper;
私有游标;
公共数据库工具(上下文){
this.context=上下文;
dbHelper=新数据库助手(上下文);
db=dbHelper.getWritableDatabase();
}
//标记
公共ArrayList getNames(字符串值){
名称=新的ArrayList();
selectStatement=新字符串[]{DB\u COMMON\u COL\u NAME};
fromStatement=DB_COMMON_COL_VALUE+“=”+VALUE+“”;
cursor=db.query(
DB_距离_表格_名称,
选择声明,
fromStatement,
无效的
无效的
无效的
无效);
int distanceIndex=cursor.getColumnIndex(DB\u COMMON\u COL\u NAME);
if(cursor.moveToFirst()){
做{
add(cursor.getString(distanceIndex));
}while(cursor.moveToNext());
}
cursor.close();
返回姓名;
}

尝试以下修改以确保关闭光标。此外,您在构造函数中获得了数据库实例。这不太好。您应该在使用数据库之前获得数据库实例,并在完成后立即调用数据库上的close()。我建议移动db=dbHelper.getWritableDatabase()在getNames(String value)方法中,在完成时调用db.close(),也在finally块中

    public ArrayList<String> getNames(String value) {
            Names = new ArrayList<String>();

            selectStatement = new String[] { DB_COMMON_COL_NAME };
            fromStatement = DB_COMMON_COL_VALUE + " = '" + value + "'";

            cursor = db.query(
            DB_DISTANCE_TABLE_NAME, 
            selectStatement, 
            fromStatement, 
            null, null, null, null);

            if (cursor != null && cursor.moveToFirst()) {

              try {
                  int distanceIndex = cursor.getColumnIndexOrThrow(DB_COMMON_COL_NAME);
                  while(cursor.moveToNext()) { 
                     distanceNames.add(cursor.getString(distanceIndex));            
                  }
              } finally { 
                if (!cursor.isClosed()) {
                cursor.close();
              }
            }

        return names;

     }
public ArrayList getNames(字符串值){
名称=新的ArrayList();
selectStatement=新字符串[]{DB\u COMMON\u COL\u NAME};
fromStatement=DB_COMMON_COL_VALUE+“=”+VALUE+“”;
cursor=db.query(
DB_距离_表格_名称,
选择声明,
fromStatement,
空,空,空,空);
if(cursor!=null&&cursor.moveToFirst()){
试一试{
int distanceIndex=cursor.getColumnIndexOrThrow(DB\u COMMON\u COL\u NAME);
while(cursor.moveToNext()){
add(cursor.getString(distanceIndex));
}
}最后{
如果(!cursor.isClosed()){
cursor.close();
}
}
返回姓名;
}