我试图通过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。
答案 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