使用CustomCursorAdapter连接到SQLite DB的Android ListView(不是ListActivity)

时间:2011-02-19 22:08:57

标签: android sqlite android-listview

我正在尝试创建自定义光标适配器并将其附加到我的列表视图。

虽然我还没有创建文本框并在我的适配器中设置值,  当我尝试调用super(ctx,c);

时,我的代码当前抛出了运行时异常

可能有什么不对?在网络和网络上搜索无法得到它。提前谢谢!

自定义光标适配器:

public class CustomCursorAdaptor extends CursorAdapter {

    private Context context;
    private int layout;

    public CustomCursorAdaptor (Context ctx, int layout, Cursor c, String[] from, int[] to) {
        super(ctx,  c);
        this.context = ctx;
        this.layout = layout;
    }

    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return(new View(context));
    }

    @Override
    public void bindView(View v, Context context, Cursor c) {

        }
}

和我的活动:

public class DynamicScrollView extends Activity {
     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Context ctx=getBaseContext();
        RelativeLayout newLayout=new RelativeLayout(ctx);
        ListView lv=new ListView(ctx);

    SQLiteDatabase db;
        db = ctx.openOrCreateDatabase("TShow.db", SQLiteDatabase.OPEN_READONLY, null);
        db.setVersion(1);
        db.setLocale(Locale.getDefault());
        db.setLockingEnabled(true);

        Cursor cur = db.query("control", new String[] {"id"}, "parent_id=2", null, null, null, null);

        CustomCursorAdaptor adapter = new CustomCursorAdaptor(ctx, lv.getId(), cur, new String[] {"id"}, new int[] {2});
        lv.setAdapter(adapter);

         newLayout.addView(lv);
         setContentView(newLayout);
         }
}

3 个答案:

答案 0 :(得分:0)

我真的不太了解您在这里传递给CursorAdaptor的基本上下文,但我知道通常您应该使用Activity作为上下文。 ActivityContext的子类,如果你不知道的话。

所以,而不是:

new CustomCursorAdaptor(ctx, lv.getId(), cur, new String[] {"id"}, new int[] {2});

......你可以试试:

new CustomCursorAdaptor(this, lv.getId(), cur, new String[] {"id"}, new int[] {2});

答案 1 :(得分:0)

游标适配器期望有一个用作索引的列_id。我在select中添加了另一列作为_id,它工作正常!更新的代码:

Cursor cur = db.query("control", new String[] {"id as _id", "id"}, "parent_id=2", null, null, null, null);

我从异常描述中追溯到它说:列'_id'不存在

答案 2 :(得分:0)

感谢您提供有关ListView工作所需的_id列的黄金提示。

@dmg:您不能使用(本机)SQL'AS'语句命名您的_id列。只需添加'_id'列而不更改它。