0

我在使用 CursorAdapter 时遇到了一些问题。

bindView()中,我以这种方式检索数据:

final String id = c.getString(c.getColumnIndexOrThrow(MySQLiteHelper.PROF_CONTACTS_KEY_ID));        
final String name = c.getString(c.getColumnIndexOrThrow(MySQLiteHelper.PROF_CONTACTS_KEY_NAME));

在这段代码之后,我打电话

Log.e("Log",id+" <=> "+name);

但是,由于一些奇怪的问题,我得到了一个 ID 向前移动了 1。

这是数据库中的情况(从模拟器中拉出来,并用 SQLite 管理器打开它):

数据库情况

这是输出:

日志猫

更大的数字(>9),ID 开始变得更加混乱:数字 10 变成数字 1,数字 13 变成数字 5,等等。我不会有很多问题,实际上唯一不匹配的是 id ,所有其他信息都对应,但我有一个详细信息活动,我将 ID 传递给该活动,以便向用户显示详细信息。

这是我应用适配器的一段代码:

    mCursor = mDb.rawGet("SELECT * FROM "+MySQLiteHelper.PROF_CONTACTS_TB_NAME+" LEFT JOIN "+
            MySQLiteHelper.EXAMS_TB_NAME+" ON "+
            MySQLiteHelper.PROF_CONTACTS_TB_NAME+"."+MySQLiteHelper.PROF_CONTACTS_KEY_COD_ESAME+"="+
                MySQLiteHelper.EXAMS_TB_NAME+"."+MySQLiteHelper.EXAMS_KEY_COD 
            + " ORDER BY " + MySQLiteHelper.PROF_CONTACTS_TB_NAME+"."+MySQLiteHelper.PROF_CONTACTS_KEY_ID);

    if (mCursor.getCount() == 0) {
        // error stuff.
    } else {

        String[] columns = new String[] {};
        int[] to = new int[] {};

        mDataAdapter = new CursorAdapterProfContacts(getSherlockActivity(), R.layout.item_prof_contact, mCursor, columns, to, 0);
        mLvContacts.setAdapter(mDataAdapter);

    }
4

3 回答 3

0

将光标移动到第一行,在初始光标之后,如 mCursor.moveToFirst()

于 2013-10-17T16:34:23.093 回答
0

您确定插入值时正确填充了 _id 吗?如果您使用模拟器并使用 Firefox 的 SQLiteManager 插件打开它,您可以提取数据库。同样,不要使用 * 查询所有内容,而是使用与您在我们的 bindView() 中使用的相同的投影列名称;这里有些东西不匹配

于 2013-10-17T16:41:10.213 回答
0

这是由于名称冲突:_id 可以同时用于 EXAMS 和 PROF。SQLlite 选择了 EXAMS 而不是 PROF。

    mCursor = mDb.rawGet("SELECT *, "+
                    MySQLiteHelper.PROF_CONTACTS_TB_NAME+"."+MySQLiteHelper.PROF_CONTACTS_KEY_ID+" AS idProf "+
                    " FROM "+MySQLiteHelper.PROF_CONTACTS_TB_NAME+" LEFT JOIN "+
                    MySQLiteHelper.EXAMS_TB_NAME+" ON "+
                    MySQLiteHelper.PROF_CONTACTS_TB_NAME+"."+MySQLiteHelper.PROF_CONTACTS_KEY_COD_ESAME+"="+
                    MySQLiteHelper.EXAMS_TB_NAME+"."+MySQLiteHelper.EXAMS_KEY_COD +
                    " ORDER BY " + MySQLiteHelper.PROF_CONTACTS_TB_NAME+"."+MySQLiteHelper.PROF_CONTACTS_KEY_ID);

最后

    final Long id = c.getLong(c.getColumnIndexOrThrow("idProf"));   

这成功了。应该抛出冲突名称错误,就像在 SQL 和 MySQL 中一样。

于 2013-10-17T18:42:41.383 回答