Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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/7/sqlite/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 sqlite数据库应用程序会关闭_Android_Sqlite_Android Sqlite - Fatal编程技术网

当我搜索表中不存在的名称时,我的android sqlite数据库应用程序会关闭

当我搜索表中不存在的名称时,我的android sqlite数据库应用程序会关闭,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,下面是查找表中是否存在某个名称的代码/方法 Contact getContact(String name) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_NAME, KEY_PH_NO }, KEY_NAME + "=?", new String[]

下面是查找表中是否存在某个名称的代码/方法

Contact getContact(String name) {
SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
            KEY_NAME, KEY_PH_NO }, KEY_NAME + "=?",
            new String[] { String.valueOf(name) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));

    db.close();
    cursor.close();
    // return contact
    return contact;
}

我已经有了一个函数来获取arrayList中的所有名称。我可以在调用上述函数之前调用它来解决我的问题。但是我想问一下,当你调用
cursor.moveToFirst()
时,如果有有效的结果,它将返回
true
,如果没有结果,它将返回
false
。如果
cursor.moveToFirst()
返回
false
,则调用任何
getXXX()
方法都将失败

if (cursor == null)
Toast.makeText(getApplicationContext(), "No Records Exist", Toast.LENGTH_SHORT).show();
试着这样做:

if( cursor.moveToFirst() )
{
    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getString(2));
}
cursor.close();

请注意,从
SQLiteDatabase.query
返回的
光标
保证为非空。

以下是从表中获取列表中所有联系人的代码

/**
 * Getting all the contacts in the database
 */
public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Contact contact = new Contact();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setPhoneNumber(cursor.getString(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }

    cursor.close();
    db.close();

    // return contact list
    return contactList;
}
}


注意:我们也可以从联系人列表中获取此联系人,两者都可以用于获取所需的联系人(即本例中的“姓名”)

我看到
query
返回一个空光标,尽管我无法确定具体情况+1对于
moveToFirst
返回false,这就是答案。logcat在哪里。。请提供给我们看看发生了什么。
/**
 * Getting all the contacts in the database
 */
public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Contact contact = new Contact();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setPhoneNumber(cursor.getString(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }

    cursor.close();
    db.close();

    // return contact list
    return contactList;
}
    /**
     * checks if name already present in the database
     * @param name
     * @return
     */
    public boolean checkDbData(String name){
        List<Contact> contactList =getAllContacts();
        boolean checkName = false ;

        for(Contact cn: contactList){
            String dbName = cn.getName();
            if(name.equals(dbName)){
                checkName = true ;
            }               
        }

        return checkName;
    }
Contact getContact(String name) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
        KEY_NAME, KEY_PH_NO }, KEY_NAME + "=?",
        new String[] { String.valueOf(name) }, null, null, null, null);
if (cursor != null)
    cursor.moveToFirst();

Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getString(2));

db.close();
cursor.close();
// return contact
return contact;