Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 - Fatal编程技术网

Android 如何防止删除空数据库后应用程序崩溃

Android 如何防止删除空数据库后应用程序崩溃,android,Android,我一直试图防止在数据库为空时意外单击“删除”按钮。它将在单击后崩溃 数据库处理程序 public void deleteLastMessage(Class a) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_NAME, KEY_MSG + " = ?", new String[] { String.valueOf(a.get_message()) }); db.c

我一直试图防止在数据库为空时意外单击“删除”按钮。它将在单击后崩溃

数据库处理程序

public void deleteLastMessage(Class a) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_NAME, KEY_MSG + " = ?",
            new String[] { String.valueOf(a.get_message()) });
    db.close();
}
public String getLastString() {

    String selectQuery = "SELECT  * FROM " + TABLE_NAME;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    cursor.moveToLast();
    LastString = cursor.getString(0);
    cursor.close();
    db.close();
    return LastString;
}
活动

public void deleteMessage(View v) {
    LastMessage = new SubliminalClass(db.getLastString());
    db.deleteLastMessage(LastMessage);
它在有数据要删除时工作正常,在没有数据时崩溃。 我的数据是一列字符串。 提到这一点,但无济于事

我在下面尝试过,但在没有数据时仍然崩溃

public boolean checkdb(){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor mCursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    Boolean rowExists;
    String nullString="";
    if (nullString.equals(getLastString())) //todo change this
        // DO SOMETHING WITH CURSOR
        rowExists = false;

    else
    {
        // I AM EMPTY
        rowExists = true;
    }
    return rowExists;
}
有人能帮我解决这个问题吗?

试试这个

检查表行计数是否大于零,然后执行删除操作

//加入你的活动

int rowCount = db.getRowCount();
    db.close();


if(rowCount>0)
{
db.deleteLastMessage(LastMessage);
}else{

}
//外接程序DBhelperClass

public int getRowCount() {
    String countQuery = "SELECT  * FROM " + TABLE_NAME;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int cnt = cursor.getCount();
    cursor.close();
    return cnt;
}



public void deleteLastMessage(Class a) {
 try{
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_NAME, KEY_MSG + " = ?",
            new String[] { String.valueOf(a.get_message()) });
    db.close();
     } catch (Exception e){
            e.printStackTrace();
    }
}

您可以在删除代码周围添加try/catch

checkdb函数也可以是这样的

public boolean checkdb(){
    SQLiteDatabase db = this.getReadableDatabase();
    Log.d(TAG,"Got Readable DB")
    Cursor mCursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    Boolean rowExists = false;
    String nullString="";
    if(mCursor != null){
        Log.d(TAG,"Cursor is not null")
        try{
            rowExists = mCursor.getCount() > 0;
            Log.d(TAG,"rowExists is " + rowExists);
            mCursor.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    return rowExists;
}

有什么警告吗?错误消息?当我单击“删除”时仍然崩溃,但没有数据。我已在上述代码中添加日志。您是否可以执行上述代码并将日志粘贴到此处?无法记录到二进制事件日志:溢出。没有向HAL提供足够的数据,预期位置为5746753,仅写入了5594400文件访问recents目录时出错?不存在?。此行出现致命错误Cursor=db.rawQueryselectQuery,null;cursor.moveToLast;活动LastMessage=new SubliminalClassdb.getLastString;如果总是错误的,即使数据库中有数据!!那很好用。谢谢你的帮助。你是个救生员。