Android Studio - Получить данные из нескольких записей, установив одно и то же слово в Edittext - PullRequest
1 голос
/ 23 января 2020

Я работаю над Android Studio, и у меня есть таблица с 2 записями, загруженными в БД SQLite в моем проекте.

public class BaseDeDatos extends SQLiteOpenHelper {

public BaseDeDatos(Context context) {
    super(context, "verbos.db", null, 8);
}


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table verbos(id integer, verbos text, referencia text, eu text, voce text, nos text)");
        db.execSQL("insert into verbos values(1, 'agito', 'abalo', 'abala', 'abalamos', 'abalam')," +
                "(2, 'agito', 'abalava', 'abalava', 'abalávamos', 'abalavam')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP TABLE IF EXISTS verbos");
        db.execSQL("create table verbos(id integer, verbos text, referencia text, eu text, voce text, nos text)");
        db.execSQL("insert into verbos values(1, 'agito', 'abalo', 'abala', 'abalamos', 'abalam')," +
                "(2, 'agito', 'abalava', 'abalava', 'abalávamos', 'abalavam')");
    }
}

И это мое действие "Verbos", где я нахожусь работает:

public class Verbos extends AppCompatActivity {

Button mostrar;
EditText etVerbos;
TextView tv1, tv11, tv12, tv13, tv14, tv15, tv21, tv22, tv23, tv24, tv25;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verbos);

    etVerbos = findViewById(R.id.etIngresar);

    tv1 = findViewById(R.id.tv1);
    tv11 = findViewById(R.id.tv11);
    tv12 = findViewById(R.id.tv12);
    tv13 = findViewById(R.id.tv13);
    tv14 = findViewById(R.id.tv14);
    tv21 = findViewById(R.id.tv21);
    tv22 = findViewById(R.id.tv22);
    tv23 = findViewById(R.id.tv23);
    tv24 = findViewById(R.id.tv24);
    mostrar = findViewById(R.id.bnMostrar);

    mostrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BaseDeDatos admin = new BaseDeDatos(getApplicationContext());
            SQLiteDatabase db = admin.getWritableDatabase();
            String[] parametros = {etVerbos.getText().toString()};

            try {
                Cursor cursor = db.rawQuery("select * from verbos WHERE verbos =?", parametros);
                cursor.moveToFirst();
                tv1.setText(cursor.getString(1));
                tv11.setText(cursor.getString(2));
                tv12.setText(cursor.getString(3));
                tv13.setText(cursor.getString(4));
                tv14.setText(cursor.getString(5));

                Cursor cursor2 = db.rawQuery("select * from verbos WHERE verbos =?", parametros);
                cursor2.moveToFirst();
                tv21.setText(cursor2.getString(2));
                tv22.setText(cursor2.getString(3));
                tv23.setText(cursor2.getString(4));
                tv24.setText(cursor2.getString(5));

            } catch (Exception e) {
                Toast.makeText(getApplicationContext(), "El Verbo no existe", Toast.LENGTH_LONG).show();
            }
        }
    });
}
}

Когда я устанавливаю значение в EditText (в данном случае поле "verbos"), а затем нажимаю sh кнопку "MOSTRAR", текстовые представления заменяются информацией в стол, в зависимости от "глаголов", которые я установил. Но он работает только с одной записью (первой), я имею в виду, что у меня может быть несколько записей с одинаковыми полями "verbos", и мне нужно показать их все в других текстовых представлениях, а не только в первой записи .

В моем примере я пытаюсь получить информацию из первой записи (и заменить в tv11, tv12, tv13, tv14) и второй записи (и заменить в tv21, tv22, tv23, tv24), когда я установил слово «agito» в EditText, но он получает только информацию из первой записи в обоих текстовых представлениях (tv11, tv12 ..... и tv21, tv22 ......).

Итак, как я могу получить информацию из нескольких записей с одним и тем же словом, заданным в тексте редактирования?

Буду очень рад, если вы поможете мне.

1 Ответ

0 голосов
/ 23 января 2020

Курсор имеет две строки для агито, чтобы перейти к следующей строке, если вторая строка существует, для отображения списка ListView или RecyclerView используется в большинстве случаев, они показывают 1+ строк.

    @Override
    public void onClick(View v) {
        BaseDeDatos admin = new BaseDeDatos(getApplicationContext());
        SQLiteDatabase db = admin.getWritableDatabase();
        String[] parametros = {etVerbos.getText().toString()};

        try {
            Cursor cursor = db.rawQuery("select * from verbos WHERE verbos =?", parametros);
            if (cursor.moveToFirst()) {
                tv1.setText(cursor.getString(1));
                tv11.setText(cursor.getString(2));
                tv12.setText(cursor.getString(3));
                tv13.setText(cursor.getString(4));
                tv14.setText(cursor.getString(5));
            }
            if (cursor.moveToNext()) {
                tv21.setText(cursor.getString(2));
                tv22.setText(cursor.getString(3));
                tv23.setText(cursor.getString(4));
                tv24.setText(cursor.getString(5));
            }

        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "El Verbo no existe", Toast.LENGTH_LONG).show();
        }
    }
...