Android数据库 - 将Intent字符串传递给Cursor

时间:2011-03-16 07:11:31

标签: java android sqlite

我正在处理的应用程序是由联系人组织的笔记集合。我在使用游标向数据库查询正确的信息行时遇到问题。主要活动是基于联系人URI的联系人列表。单击联系人会将Contact _ID作为意图字符串传递。我想将字符串传递给游标,只显示contactId键与intent字符串匹配的行,但每次传递字符串时,我都会得到“NumberFormatException:无法将'null'解析为整数。”我知道意图正在进行,因为我创建了一个菜单项,它在其中生成带有intent字符串的toast消息,每次都可以正常工作,并且当使用ID对参数进行硬编码时,游标会起作用。我只是想知道出了什么问题!我只用了一个半星期的Android,所以它很可能非常简单。任何帮助是极大的赞赏。我的代码如下。

这是应显示已过滤的数据行的活动:

public class NotesList extends ListActivity {
    public MyDbAdapter db;
    public String mIntentString, contactId;
    public int mIntentInt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        db = new MyDbAdapter(this);
        db.open();
        fillData();
        Bundle extras = getIntent().getExtras();
        mIntentString = extras.getString("contactId");
        contactId = extras.getString("contactId");
    }

    private void fillData() {
        Cursor mCursor = db.fetchNotesForContact(contactId);
        startManagingCursor(mCursor);
        ListAdapter adapter = new SimpleCursorAdapter(
                this,
                android.R.layout.two_line_list_item,
                mCursor,
                new String[] {MyDbAdapter.KEY_TITLE, MyDbAdapter.KEY_DATETIME},
                new int[] {android.R.id.text1, android.R.id.text2});
        setListAdapter(adapter);
    }

这是被调用游标的代码,当将参数从“contactId”更改为“139”时,将返回该联系人的注释:

public Cursor fetchNotesForContact(String contactId) {
    String[] columns = {KEY_ROWID, KEY_CONTACTID, KEY_TITLE, KEY_BODY, KEY_DATETIME};
    String projection = ("contactId = ?");
    String[] arguments = {contactId};
    return mDb.query(DATABASE_TABLE, columns, projection, arguments, null, null, null);
}

1 个答案:

答案 0 :(得分:1)

问题是,在contactId具有其值之前,您正在调用fillData()方法。因此null中的fetchNotesForContact也是如此。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    db = new MyDbAdapter(this);
    db.open();
    //fillData(); move this
    Bundle extras = getIntent().getExtras();
    mIntentString = extras.getString("contactId");
    contactId = extras.getString("contactId");
    fillData(); //to here
}
希望有所帮助。