2012-07-09 142 views
0

我已经阅读了很多关于如何从数据库中填充listview的文章。但我只是不能在我的应用程序上做!我不知道我做错了什么。 I'm很新的编程所以有配发的东西我不理解,但我尝试学习:)从我的数据库填充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); 
} 

但是,当试图有一个列表视图来显示数据库我的应用程序崩溃或不显示任何东西。在我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; 
} 

我不知道要放什么东西在我的活动,应显示列表视图。

public class MyStones extends ListActivity { 

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


} 

}

能有人帮我,我将要放弃嘿嘿:) 的感谢!

+0

你能帮我们一个忙,并发布您的logcat文件,或者错误信息?谢谢! – BlackHatSamurai 2012-07-09 18:56:31

+1

你正在返回'stone'而不是'stonelist'检查你的返回值'List '这就是一点 – Hunt 2012-07-09 18:58:29

+0

你的类名非常误导......'MyStonesDatabase'是存储在数据库中的一个Item,但我首先想到它是您的实际数据库 – 2012-07-09 18:59:20

回答

0

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

让这个工作比你想像的要复杂一点,但不是太复杂。

希望这有助于:

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

+0

感谢您的接受!如果你喜欢这个答案,随时乐意点赞。 – BlackHatSamurai 2012-07-10 16:23:45