【问题标题】:Android Database - Passing Intent String into CursorAndroid 数据库 - 将意图字符串传递给光标
【发布时间】:2011-03-16 07:11:31
【问题描述】:

我正在开发的应用是由联系人组织的笔记集合。我在使用游标查询数据库以获取正确的信息行时遇到问题。主要活动是基于联系人 URI 的联系人列表。单击联系人会将联系人 _ID 作为意图字符串传递。我想将字符串传递到光标中以仅显示contactId键与意图字符串匹配的行,但每次传递字符串时,我都会得到“NumberFormatException:无法将'null'解析为整数。”我知道意图正在执行,因为我创建了一个菜单项,该菜单项在其中制作带有意图字符串的 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);
}

【问题讨论】:

  • 你的contactId列的数据类型是什么
  • contactId 是一个整数。我曾考虑将其更改为字符串,但不确定是否会产生任何影响,因为 ContactsContract.Contacts._ID 是一个整数。不确定这是否真的很重要。

标签: java android sqlite


【解决方案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
}

希望有帮助。

【讨论】:

  • 知道了。谢谢您的帮助。我对编程还是很陌生,所以像这样的小事情让我感到厌烦。
  • 别让我...这种错误与编程经验的时间无关。这是一个典型的错误,您在自己的代码上加注了几个小时,却无法找出问题所在。然后其他人进入房间并直接指向错误的线路。 (经常发生在我身上:-))
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多