База данных Android - передача строки намерений в курсор - PullRequest
1 голос
/ 16 марта 2011

Мое приложение, над которым я работаю, представляет собой набор заметок, организованных Контактами.У меня проблема с использованием курсора для запроса базы данных для правильных строк информации.Основным видом деятельности является список контактов на основе URI контактов.Щелчок по контакту передает Контакт _ID в виде строки намерения.Я хочу передать строку в курсор, чтобы отобразить только те строки, где ключ contactId совпадает со строкой намерения, но каждый раз, когда я передаю строку, я получаю «NumberFormatException: невозможно проанализировать« ноль »как целое число».Я знаю, что намерение проходит, потому что я создал пункт меню, который выдает тостовое сообщение со строкой намерения, которое работает каждый раз, и курсор работает, когда жестко кодирует аргумент с идентификатором.Я просто не могу понять, где что-то идет не так!Я работаю с 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 Ответ

1 голос
/ 16 марта 2011

Проблема в том, что вы вызываете метод fillData() до того, как contactId имеет свое значение.Так что 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
}

надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...