Android 如何在listview中显示数据库中的项目?

Android 如何在listview中显示数据库中的项目?,android,listview,android-listview,Android,Listview,Android Listview,我在这个论坛上看了很多关于这个问题的帖子,但不管我有多累,我都能解决这个问题。我想在列表视图中显示数据库中的项目。我厌倦了为listview.java编写代码,以便从数据库中查看项目,但它不起作用 DBAdapter.java Listview.java 更新2: 我得到了错误的答案。我必须使用: if(cursor != null && cursor.moveToFirst()){ // my codes } cursor.close(); 首先,您应该通知适配

我在这个论坛上看了很多关于这个问题的帖子,但不管我有多累,我都能解决这个问题。我想在列表视图中显示数据库中的项目。我厌倦了为listview.java编写代码,以便从数据库中查看项目,但它不起作用

DBAdapter.java

Listview.java

更新2: 我得到了错误的答案。我必须使用:

if(cursor != null && cursor.moveToFirst()){
   // my codes
}
    cursor.close();

首先,您应该通知适配器ListView有其他内容,您可以使用

yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);
其次,您应该在另一个线程中或作为AsyncTask执行ListView填充,这样DB操作会花费太长时间,如果您不这样做,则在调用ListView填充方法后,DB的内容将可用,并且您将始终拥有空ListView,但DB中的内容不可用。

这是错误的

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        R.layout.main, R.id.dblist, values);
应替换为

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        /* your row layout not your main activity layout */,
                        /* ID of a TextView for printing on it */, values);
或者尝试Android的简单ListView项目:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, values);
更新1


yourAdapter.notifyDataSetChanged;这是没有必要的!由于使用此适配器的第一个DB Op可能不是必需的,但可以工作,下一个DB Op将需要类似的东西。如果您是我的答案,请告诉我我的答案中有什么错误?谢谢,它工作了。这很容易,我想我很愚蠢。随着人口的增长,但随着下一个DB Op,最好通知Change@Gödel77同意下一次更改,他应该调用notifyDataSetChanged,但这是他第一次不应该这样做。我在代码中添加了notifyDataSetChanged,谢谢。但我有个问题。在列表视图中,我只看到保存在数据库中的第一个项目,但看到第二个项目,依此类推。好的,谢谢你。你是老板。我不知道是谁否决了你的答案,但我确信它100%有效。
yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        R.layout.main, R.id.dblist, values);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        /* your row layout not your main activity layout */,
                        /* ID of a TextView for printing on it */, values);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, values);
List<String> values = new ArrayList<String>();

do {
    String website = cursor.getString(DBAdapter.COL_WEBSITE);
    String username = cursor.getString(DBAdapter.COL_USERNAME);
    String password = cursor.getString(DBAdapter.COL_PASSWORD);

    values.add(website + " - " + username + " - " + password);
} while(cursor.moveToNext());

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                                  R.layout.main, R.id.dblist, values);
listview.setAdapter(adapter);

 // Close the cursor to avoid a resource leak.
cursor.close();