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 つ前に進みました。

これは DB の状況です (エミュレーターからプルし、SQLite Manager で開きます):

データベース状況

そして、これは出力です:

ログキャット

より大きな数字 (>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

名前の衝突が原因でした: _id は EXAMS と PROF の両方で参照できます。SQLlite は PROF の代わりに EXAMS を選択しました。

    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 に答える
0

値を挿入するときに _id が正しく設定されていることを確認してください。エミュレーターを使用してデータベースを抽出し、Firefox 用の SQLiteManager プラグインで開くことができます。同様に、すべてを * で照会する代わりに、bindView() 内で使用するのと同じ射影列名を使用します。ここで何かが一致しません

于 2013-10-17T16:41:10.213 に答える