从我的数据库填充ListView

时间:2012-07-09 18:49:42

标签: android database android-listview

我已经阅读了很多关于如何从数据库填充listview的帖子。但我只是不能在我的应用程序上做到这一点!我不知道我做错了什么。我是非常新的编程所以有很多我不理解的东西,但我想学习:)

我在数据库中添加项目而没有任何问题,在活动中使用此代码:

String selectedstone = (String) stonespinner.getSelectedItem();
String weight = etaddweight.getText().toString();

db.addStone(new MyStonesDatabase(selectedstone, weight));
在DatabaseHandler.java中的

我有这个:

// Adding new stone
void addStone(MyStonesDatabase stone) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_STONE, stone.getStone());
    values.put(KEY_WEIGHT, stone.getWeight());

    // Inserting Row
    db.insert(TABLE_MYSTONES, null, values);
    db.close(); // Closing database connection
}

我可以看到我的数据库通过运行这个来填充:

Log.d("Reading: ", "Reading all items..");
List<MyStonesDatabase> items = db.getAllstones();

for (MyStonesDatabase cn : items) {
String log = "Id: " + cn.getID() + ", Stone: "
+ cn.getStone() + ", Weight: " + cn.getWeight();
// Writing Items to log
Log.d("Name: ", log);
}

但是当试图让listview显示数据库时,我的应用程序崩溃或者没有显示任何内容。在我的DatabaseHandler.java中,我有这个:

// Getting All items from database
public List<MyStonesDatabase> getAllstones() {
    List<MyStonesDatabase> stoneList = new ArrayList<MyStonesDatabase>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_MYSTONES;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            MyStonesDatabase stone = new MyStonesDatabase();
            stone.setID(Integer.parseInt(cursor.getString(0)));
            stone.setStone(cursor.getString(1));
            stone.setWeight(cursor.getString(2));

            // Adding stone to list
            stoneList.add(stone);
        } while (cursor.moveToNext());
    }

    // return stonelist
    return stone;
}

我不知道应该在我的活动中放什么应该显示listview。

public class MyStones extends ListActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

}

有人可以帮助我,我即将放弃嘿嘿:) 谢谢!

1 个答案:

答案 0 :(得分:0)

这是一篇很棒的文章/教程,可能对您有所帮助。填充listView并不像在Activity中执行某些操作那么简单。您需要创建一个listAdapter和其他一些东西。在本教程中,他们在数组中使用硬编码值。您可以尝试使其工作,然后删除硬编码数据,并使用从数据库获取的数据。

让它发挥作用比你想象的要复杂一些,但不要过于复杂。

希望这会有所帮助:

http://www.ezzylearning.com/tutorial.aspx?tid=1763429