本文介绍了简单的游标适配器问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的code一个简单的游标适配器。

 公共类CursorList扩展ListActivity {
/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);    DatabaseAdapter DA =新DatabaseAdapter(这一点,mydb.sqlite);    da.open();
    CUR = da.fetchAllRecords光标(医生,新的String [] {名字});
    startManagingCursor(现);    cur.moveToFirst();
    做{
        Log.v(信息,cur.getString(cur.getColumnIndex(名字)));
    }而(cur.moveToNext());    cur.moveToFirst();    的String [] =由新的String [] {姓};
    INT []为= INT新[] {} R.id.row;    SimpleCursorAdapter SCA =新SimpleCursorAdapter(这一点,R.layout.row_item,CUR,从,到);    setListAdapter(SCA);
    }
}

的数据记录在日志中正确显示,但code停止工作时,它到达

  SimpleCursorAdapter SCA =新SimpleCursorAdapter(这一点,R.layout.row_item,CUR,从,到);

行。

我得到的错误是:

  ERROR / AndroidRuntime(26746):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
ERROR / AndroidRuntime(26746):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.arnab.cursorlist / com.arnab.cursorlist.CursorList}:
java.lang.IllegalArgumentException异常:列'_id'不存在

我在哪里去了?

为什么它给了列'_id'不存在错误?它是我们必须在我们的表的必要列?

编辑:

当我把光标相关code在try catch块,像这样:

  {尝试
        SimpleCursorAdapter SCA =新SimpleCursorAdapter(这一点,R.layout.row_item,CUR,从,到);        setListAdapter(SCA);
    }
    赶上(例外五){
        Log.v(错误,E.getMessage());
    }

我得到的消息:

  VERBOSE /错误(1026):列'_id'不存在

@Rasel:这里是 fetchAllRecords

 公共光标fetchAllRecords(字符串表,字符串列[]){
    返回mDb.query(表,列,NULL,NULL,NULL,NULL,NULL);
}


解决方案

Yes, if you want to use your database information in a cursor adapter. The adapter uses it for internal purposes. Your table must have an '_id' column, and you must select it in your query (so it is in the Cursor result set). You do not have to actually display it in your ListView.

Revised for Posterity

Instead of actually adding the '_id' column, you can SELECT your own 'id' column as '_id', and it will work just the same.

这篇关于简单的游标适配器问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-03 19:56
查看更多