gpt4 book ai didi

Android列 '_id'不存在?

转载 作者:IT老高 更新时间:2023-10-28 13:13:12 25 4
gpt4 key购买 nike

我在使用记事本示例时遇到了问题。这是来自 NotepadCodeLab/Notepadv1Solution 的代码:

String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
int[] to = new int[] { R.id.text1 };

SimpleCursorAdapter notes = new SimpleCursorAdapter(this,
R.layout.notes_row, c, from, to);

这段代码似乎工作正常。但为了清楚起见,我运行了 ADB实用程序并运行 SQLite 3。我检查了架构如下:

sqlite> .schema

CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE notes (_id integer primary key autoincrement, title text
not null, body text not null);

我觉得一切都很好。


现在开始我的应用程序,据我所知,它与一些小的变化。我已经简化并简化了我的代码,但是问题依然存在。

String[] from = new String[] { "x" };
int[] to = new int[] { R.id.x };

SimpleCursorAdapter adapter = null;
try
{
adapter = new SimpleCursorAdapter(this, R.layout.circle_row, cursor, from, to);
}
catch (RuntimeException e)
{
Log.e("Circle", e.toString(), e);
}

当我运行我的应用程序时,我得到一个 RuntimeException 和以下打印在我的 Log.e() 语句中的 LogCat 中:

LogCat 消息:

java.lang.IllegalArgumentException: column '_id' does not exist

所以,回到 SQLite 3 看看我的架构有什么不同:

sqlite> .schema创建表 android_metadata(语言环境文本);CREATE TABLE circles(_id 整数主键自增,序列整数,半径实数,x 实数,y 实数);

我看不出我是怎么错过“_id”的。

我做错了什么?

我的应用程序和记事本示例之间的不同之处在于我首先使用Eclipse 向导,而示例应用程序已经放在一起。是我需要为新应用程序进行某种环境改变使用 SQLite 数据库?

最佳答案

我明白了,documentation for CursorAdapter状态:

The Cursor must include a column named _id or this class will not work.

SimpleCursorAdapter 是派生类,因此看来此语句适用。但是,该声明在技术上是错误的,并且对新手有些误导。游标的结果集必须包含_id,而不是游标本身。
我确信这对 DBA 来说是清楚的,因为这种速记文档对他们来说是清楚的,但是对于那些新手来说,声明中的不完整会导致困惑。游标就像迭代器或指针,它们只包含一种用于传输数据的机制,它们本身不包含列。

Loaders documentation包含一个示例,可以看出 _id 包含在 projection 参数中。

static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.CONTACT_STATUS,
Contacts.CONTACT_PRESENCE,
Contacts.PHOTO_ID,
Contacts.LOOKUP_KEY,
};
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// ...
return new CursorLoader(getActivity(), baseUri,
CONTACTS_SUMMARY_PROJECTION, select, null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
}

关于Android列 '_id'不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3359414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com