android SimpleCursorAdapter从数据库填充ListView

时间:2017-01-16 21:37:14

标签: listview simplecursoradapter

我试图通过SimpleCursorAdapter从数据库填充ListView,但它给出了错误。 引起:java.lang.IllegalArgumentException:column' _id'不存在

这是我的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作为multichoice。

2 个答案:

答案 0 :(得分:0)

你想做什么?您是否只想列出数据,如果是这样的话

私人ListView lvCities;     private static String [] cities = {&#34; London&#34;,&#34; Paris&#34;,&#34; NewYork&#34; };

将上述内容放在创建上, 在onCreate中启动此方法initListView();

然后在onCreate下面创建该方法,就像这样

private void 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具有此id

机器人:ID =&#34; @ + ID / lvCities&#34;

如果你需要使用数据库帮助器,我认为你需要另一个实现SQLite的类来将你的数据写入一个表,然后你可以修改它,但这是你可以在其上找到的另一组代码。 stackOverflow或其他站点,根据您的需要,有很多方法可以实现它。

答案 1 :(得分:0)

  

java.lang.IllegalArgumentException:列'_id'不存在

这个错误意味着你没有在游标中提供列“_id”,当使用它作为适配器时,使用带游标的_id列是android约定。工作光标的示例:

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

在您的情况下,编辑MyDBHandler类的showAllRecords()方法,返回Cursor:

Cursor cursor = myDBHandler.showAllRecords();

您可以更新表格以包含_id列,也可以使用别名和 ROWID

SELECT myTable.ROWID AS _id, column1, column2, column3... from myTable