2017-01-16 3 views
0

Я пытаюсь заполнить ListView из базы данных через SimpleCursorAdapter, но он дает ошибку. Вызвано: java.lang.IllegalArgumentException: column '_id' не существуетandroid SimpleCursorAdapter заполняет ListView из базы данных

вот моя BlistActivity, которая содержит мой ListView.

public class BListActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_blist); 

    MyDBHandler myDBHandler = new MyDBHandler(this,null,3); 
    ListView listView = (ListView) findViewById(R.id.blistView); 
    Cursor cursor = myDBHandler.showAllRecords(); 
    String[] columnNames = new String[]{"name_number"}; 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_list_item_1, 
      cursor, 
      columnNames, 
      new int[]{android.R.id.text1}); 
    listView.setAdapter(adapter); 
} 
} 

вот мой xml-код для этой деятельности.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.haroon.vuultimateblocker.BListActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/blistView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     android:choiceMode="multipleChoice"/> 
</RelativeLayout> 

также стоит упомянуть, что мне нужен listView как multiplechoice.

ответ

0

Что вы пытаетесь сделать? Вы просто хотите перечислить данные, если это так

private ListView lvCities; частная статическая строка [] города = {«Лондон», «Париж», «Нью-Йорк»};

положить это выше onCreate, in onCreate начать этот метод initListView();

, а затем сделать этот метод ниже OnCreate, как это

частная пустота initListView() { lvCities = (ListView) findViewById (R.id.lvCities);

ArrayAdapter<CharSequence>adapter=new ArrayAdapter<CharSequence>(this,android.R.layout.simple_list_item_checked,cities); 

    lvCities.setAdapter(adapter); 
} 

Измените файл XML, чтобы иметь ListView с этим идентификатором

андроида: ид = «@ + код/​​lvCities»

Если вам необходимо использовать помощник базы данных, я думаю, что вам нужно другой класс, в котором вы реализуете SQLite для записи своих данных в таблицу, которую затем можете изменить, но это целый другой набор кода, который вы можете найти на stackOverflow или других сайтах, существует множество способов его реализации в зависимости от того, что вам нужно.

0

java.lang.IllegalArgumentException: колонка «_id» не существует

Эта ошибка означает, что вы не обеспечили столбец «_id» в курсоре, это андроид конвенции использовать _id столбец с курсором при его использовании для адаптеров. Пример рабочего курсора:

String tableName = "mTable"; 
String columns[] = {"_id", "column1", "column2", "column3"}; 
cursor = db.query(table, columns, null, null, null, null, null); 

В вашем случае, редактировать showAllRecords() метод MyDBHandler класса, где вы возвращаете курсор:

Cursor cursor = myDBHandler.showAllRecords(); 

Вы можете либо обновить таблицу, чтобы включить столбец _id или вы можете получить его таким образом, используя псевдоним и ROWID:

SELECT myTable.ROWID AS _id, column1, column2, column3... from myTable 
Смежные вопросы