Как использовать значение текстового представления для запроса строки базы данных, равной значению текстового представления? - PullRequest
0 голосов
/ 06 февраля 2012

Я уверен, что рад, что этот сайт здесь. Это помогало мне каждый раз.

Итак, моя новая проблема заключается в том, что я передал значение из одного действия в другое и установил это значение в виде текста. Значение всегда числовое. Затем я использую «выбранный пункт меню», чтобы передать это значение другому виду деятельности и установить это значение в виде текста. Я хочу использовать это значение (которое является числовым и представляет идентификатор строки, связанный с данными) для запроса к базе данных и возврата строки, связанной с числовым значением, упомянутым ранее. Затем заполните соответствующий текст для редактирования или представления текста того же действия.

Здесь я вызываю текстовое значение (tv1)

private void populateFields() {

if (tv1!=null) {
    Cursor note = mDbHelper.fetchRow(tv1);
    startManagingCursor(note);

    //rowid.setText(note.getString(
        //  note.getColumnIndexOrThrow(DatabaseManager.KEY_ROWID)));
    txtbox28.setText(note.getString(
           note.getColumnIndexOrThrow(DatabaseManager.KEY_NAME)));
    txtbox1.setText(note.getString(
            note.getColumnIndexOrThrow(DatabaseManager.NICBASEML)));
    txtbox4.setText(note.getString(
            note.getColumnIndexOrThrow(DatabaseManager.NICDROPS)));
    txtbox8.setText(note.getString(
            note.getColumnIndexOrThrow(DatabaseManager.NICPERCT)));

и запрос

public Cursor fetchRow(TextView tv1) throws SQLException {

            Cursor mCursor =

                mDb.query(true,DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                        NICBASEML, NICDROPS, NICPERCT, PGML, PGDROPS,PGPERCT,
                        VGML,VGDROPS,VGPERCT, WAPML, WAPDROPS, WAPPERCT, 
                        FLV1NAME, FLV1ML, FLV1DROPS, FLV1PERCT,
                        FLV2NAME, FLV2ML, FLV2DROPS, FLV2PERCT,
                        FLV3NAME, FLV3ML, FLV3DROPS, FLV3PERCT,
                        FLV4NAME, FLV4ML, FLV4DROPS, FLV4PERCT,
                        DROPSML, AMOUNT, FINALNIC, BPG, BVG, BASENIC}, KEY_ROWID + "=" + tv1,  null, null, null, null, null);

            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;

        }

это ошибка, которую я получаю сейчас.

02-07 12: 14: 16.120: E / AndroidRuntime (2713): вызвано: android.database.sqlite.SQLiteException: около "@ 405dcd48": синтаксическая ошибка: при компиляции: SELECT DISTINCT _id, name, nicbaseml , nicdrops, nicperct, pgml, pgdrops, pgperct, vgml, vgdrops, vgperct, wapml, wapdrops, wapperct, flv1name, flv1ml, flv1drops, flv1perct, flv2name, flv2ml, flv2 flv3, flv3, flv3 , flv4drops, flv4perct, dropsml, количество, finalnic, bpg, bpg, basenic ОТ рецептов ГДЕ _id=android.widget.TextView@405dcd48

хммм застрял на этом. Где ошибка @ 405dcd48?

1 Ответ

0 голосов
/ 09 февраля 2012

Вот решение.Потребовалось много часов (2 дня), чтобы понять это, а затем это было doooo!рука в лицо момент.Но, тем не менее, вот решение для других, имеющих ту же проблему.В вашей декларации для заполнения полей (в данном случае fetch (row).

Сделайте это:

private void populateFields() {

String row = tv1.getText().toString();//String to get the textview of the rowid

        if (tv1!= null) { //Checking to see if the field is not empty to proceed

            Cursor note = mDbHelper.fetchRow(row);//Calling my cursor to manage data
            startManagingCursor(note);//Starting the management and retrieve data

Вы получите ошибку, как указано выше, а затем исключение нулевого указателя. Это можетисправить это, объявив свои поля -> (txtbox1 = (TextView) findViewById (R.id.textView22);.

Ваш менеджер баз данных должен быть сконфигурирован для строки.:

public Cursor fetchRow(String row) throws SQLException {

Теперь вы можете извлечь данные из строки, используя значение textview или editview, равное идентификатору строки данных, которые вы ищете.

...