0

基本上这本身不是问题,我的代码到目前为止有效。

我拥有的是一个应用程序,它允许用户登录并根据他在数据库中的 ID,显示他保存的笔记。对于这个视图,我有这部分代码:

title = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
MyDbHandler dbh = new MyDbHandler(this);

for(int i = 0; i < 999; i++) {
    content = dbh.getNoteTitle(id, i);    //getNoteTitle(int, int) returns String
    if(content != null && content != "0")
        title.add(content);
    else
        break;
}
list.setAdapter(title);

正如我所说,这到目前为止有效。事情是 - 我对使用'break;'非常不满意。' 在这里,正如我在教育中了解到的那样,不应该使用它。有没有更顺畅的方法来解决这个问题?

'内容!=“0”'应该是'!content.equals("0") ' 通常,对吗?但是那个不起作用……这是为什么呢?

4

1 回答 1

1

我不确定你想做什么。首先,您应该对字符串使用“相等”方法。条件 "content != "0" 将始终为真,因为您正在比较 2 个不同的对象。条件 "! content.equals("0")" 在大多数情况下应该返回 true(当值不是 "0" 时),您可能应该使用调试器来准确查看内容的值是什么。

其次,如果您想从数据库中获取所有注释并将它们显示给用户,您应该首先在 SQLiteOpenHelper 中有一个类似的方法(为每个项目查询数据库效率不高,加上关注点的分离):

public ArrayList<String> getNotesList (int userID){
    SQLiteDatabase db = getWritableDatabase();
    Cursor c = db.query(TABLE_NAME, new String[] {MyDbHandler.COLUMN_NOTE_TITLE},  MyDbHandler.userID + "=" + userID,null, null, null, null);
    ArrayList<String> list = null;
        String noteTitle;
        if (c != null && c.moveToFirst())
        {
                    list = new ArrayList<String>(c.getCount());
            for (int i = 0; i < c.getCount(); i++)
            {
                noteTitle = c.getString(c.getColumnIndex(MyDbHandler.COLUMN_SESSION_PATH));
                list.add(noteTitle);
                c.moveToNext();
            }
        }
        c.close();
        db.close();
        return list;

我认为您不应该保存不想使用的注释(例如 null 或“0”),因此我不在这里检查,而是检查 addNote 方法。对于列表初始化,您有:

MyDbHandler dbh = new MyDbHandler(this);
ArrayList listData = dbh.getNotesList(id)
if (listData != null && listData.length != 0){
    title = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
    listData.setAdapter(title); 
}

我没有测试代码,但我希望它对你有帮助。祝你好运!

于 2013-06-18T07:24:53.297 回答