ListView возвращает несколько записей для одной и той же записи из SQLite - PullRequest
0 голосов
/ 14 января 2012

Я не совсем уверен, какая часть моего кода делает это возможным. Это моя первая попытка кодирования в SQLite с Android, и я использую ContentValues ​​для ввода записей в базу данных. Я не получаю ошибок или чего-либо еще, и данные вставляются правильно, однако я получаю 5 записей ListView для каждой записи, когда я извлекаю их из базы данных. Либо я неправильно понимаю, как вводятся данные при использовании ContentValues ​​и .insert для помещения данных в базу данных, либо я делаю что-то не так при извлечении данных из базы данных.

Вот код, который я использую для вставки данных в базу данных.

DatabaseHelper helper = new DatabaseHelper(this);
    database = helper.getWritableDatabase();

    ContentValues cv=new ContentValues();

    cv.put(myName, titleText);
    cv.put(myFileName, filenameText);
    cv.put(myRecDate, recordedText);
    cv.put(myPubDate, publishedText);
    cv.put(myDescription, DescriptionText);

    database.insert(myTable, castName, cv);
    database.insert(myTable, castFileName, cv);
    database.insert(myTable, castRecDate, cv);
    database.insert(myTable, castPubDate, cv);
    database.insert(myTable, castDescription, cv);

    database.close();

Вот мой код для заполнения моего ListView.

DatabaseHelper helper = new DatabaseHelper(this);
    database = helper.getWritableDatabase();
    Cursor data = database.query("myDb", fields, null, null, null, null, null);
    dataSource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[] {R.id.idText, R.id.name, R.id.description});

    final ListView view = getListView();

    view.setHeaderDividersEnabled(true);
    view.addHeaderView(getLayoutInflater().inflate(R.layout.row, null));
    setListAdapter(dataSource);

    database.close();

Поскольку данные успешно вставляются, я не думаю, что с моим классом DatabaseHelper что-то не так. Любой совет с благодарностью.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Похоже, вы вызываете insert () для каждого столбца.Поместите значения столбца в объект ContentValues ​​с идентификатором имени столбца.Затем позвоните

database.insert(myTable, null, cv);

только один раз.

1 голос
/ 14 января 2012

ContentValues ​​должен представлять одну запись.Итак, у вас есть эта часть, где вы создаете запись из вашего объекта.Это должно быть сопоставление имени столбца со значением столбца.

cv.put(myName, titleText);
cv.put(myFileName, filenameText);
cv.put(myRecDate, recordedText);
cv.put(myPubDate, publishedText);
cv.put(myDescription, DescriptionText);

И затем здесь вы вставляете одну и ту же запись 5 раз.Я предполагаю, что ваши вторые параметры здесь - это имена столбцов.

database.insert(myTable, castName, cv);
database.insert(myTable, castFileName, cv);
database.insert(myTable, castRecDate, cv);
database.insert(myTable, castPubDate, cv);
database.insert(myTable, castDescription, cv);

В Android вам просто нужно указать имя таблицы, в этом случае myTable, второй параметр должен быть null, аПоследний параметр должен быть объектом ContentValues.

Поэтому правильный способ сделать это будет:

ContentValues cv = new ContentValues();
cv.put(nameColumn, nameValue);
cv.put(fileNameColumn, fileNameValue);
... etc ...

database.insert(tableName, null, cv);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...