Android ListView (не ListActivity) подключается к базе данных SQLite с помощью CustomCursorAdapter - PullRequest
0 голосов
/ 20 февраля 2011

Я пытаюсь создать адаптер Custom Cursor и прикрепить его к моему списку.

Хотя я еще не готов создавать текстовые поля и устанавливать значения внутри моего адаптера, мой код в настоящее время выдает исключение времени выполнения, когда я пытаюсь вызвать 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 голосов
/ 20 февраля 2011

В адаптере курсора ожидается наличие столбца _id, который он использует в качестве индекса. Я добавил еще один столбец как _id в выбор, и это сработало! Обновленный код:

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

Я отследил его от описания исключения, которое гласило: столбец '_id' не существует

0 голосов
/ 26 мая 2011

Спасибо за золотой совет о столбце _id, который необходим для работы ListView.

@ dmg: вы не должны именовать столбец _id с помощью (нативного) оператора SQL 'AS'. Просто добавьте столбец '_id', не меняя его.

0 голосов
/ 20 февраля 2011

Я действительно не знаю много о базовом контексте, который вы передаете вашему CursorAdaptor здесь, но я понимаю, что обычно вам лучше использовать Activity в качестве контекста. Activity - это подкласс Context, если вы не знали.

Итак, вместо:

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

... вы можете попробовать:

new CustomCursorAdaptor(this, lv.getId(), cur, new String[] {"id"}, new int[] {2});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...