0

私のアプリは連絡帳であり、最終的にすべてが正常に機能していますが、「ユーザー」が新しい連絡先を追加すると、強制的に閉じられます..しかし、アプリは閉じず、むしろ再起動しました! 連絡先リストを確認すると、追加しようとしたものが実際に追加されていることがわかります!!! logcat はエラーがここにあると言います:

return cursorToContact(cursor);

これは、この add 関数の一部です。

    /** Add new Contact to Database. */
public Contact createContact(Contact contact) {
    //Used to store data like : COLUMN_NAME , VALUE.
    ContentValues values = new ContentValues();
    values.put(MySQLiteHelper.COLUMN_FIRST_NAME, contact.getFirstName());
    values.put(MySQLiteHelper.COLUMN_LAST_NAME, contact.getLastName());
    //Insert new contact and get the id of it.
    long insertId = database.insert(MySQLiteHelper.TABLE_NAME_FTS, null,
            values);
    //To show how to query (To get contact by it id).
    Cursor cursor = database.query(MySQLiteHelper.TABLE_NAME_FTS,
            allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, 
                             null,
            null, null, null);
    //Move Cursor to the first row.
    cursor.moveToFirst();
    return cursorToContact(cursor);
}

なぜそれが起こるのか > sqlite fts3 データベースを使用していることに注意してください

cursorToContact :

    /** Used to get Contact data from Cursor to Memo Object. */
private Contact cursorToContact(Cursor cursor) {
    Contact contact = new Contact();
    contact.setId(cursor.getLong(0));
    contact.setFirstName(cursor.getString(1));
    contact.setLastName(cursor.getString(2));
    return contact;
}
4

1 に答える 1

2

この行は、実際にデータベースにデータを追加します。

   long insertId = database.insert(MySQLiteHelper.TABLE_NAME_FTS, null,
            values);

その後に起こることはすべて偶発的です (ほとんど)。

クエリが台無しになると、他の部分が失敗します。あなたの質問:

Cursor cursor = database.query(MySQLiteHelper.TABLE_NAME_FTS,
        allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, 
                         null,
        null, null, null);

適切に見えます。ただし、allColumns が台無しになる可能性があります。

また、他の値を返すためだけに、CursorToContact で新しい連絡先を設定するのに苦労する理由がわかりません。

    /** Used to get Contact data from Cursor to Memo Object. */
private Contact cursorToContact(Cursor cursor) {
    Contact contact = new Contact();
    contact.setId(cursor.getLong(0));
    contact.setFirstName(cursor.getString(1));
    contact.setLastName(cursor.getString(2));
    return contact;
}

連絡先は一切使用しません。私はあなたがそれを返してくれると思っていたでしょう。

于 2013-04-14T04:37:24.720 に答える