Задать вопрос
@dnpgk

Ошибка при использовании do while для вывода случайных записей из БД?

При запросе из БД в TextViev (text1) текста вопроса нужно после ответа в EditText вывести следующую рандомную строку вопроса, при этом учитывая количество правильных и неправильных ответов через числовые переменные ( "а" и "х"). Написал следующий код. Почему то после ответа не загружает текст следующего вопроса(в rawQuery product - это текст вопроса, а gono - правильный ответ,хранящийся в БД,который сравниваем с введенным значением через OnKeyListener). Подскажите,пожалуйста,где оступился.

import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.io.IOException;


public class MainActivity extends AppCompatActivity  {

    //Объявим переменные компонентов
    EditText editText;
    TextView text1;

    private DatabaseHelper mDBHelper;
    private SQLiteDatabase mDb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHelper = new DatabaseHelper(this);



        try {
            mDBHelper.updateDataBase();
        } catch (IOException mIOException) {
            throw new Error("UnableToUpdateDatabase");
        }

        try {
            mDb = mDBHelper.getWritableDatabase();
        } catch (SQLException mSQLException) {
            throw mSQLException;
        }

        //Найдем компоненты в XML разметке

        text1 = (TextView) findViewById(R.id.text1);
        editText =  findViewById(R.id.editText);
        final int[] a = {0};
        final int[] x = {0};
        do {


            String product = "";
            String gono = "";


            final Cursor cursor = mDb.rawQuery("SELECT  * FROM " + "book1" + " ORDER BY RANDOM() LIMIT 1", null);
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                product += cursor.getString(1);
                gono += cursor.getString(2);
                cursor.moveToNext();
            }
            cursor.close();

            text1.setText(product);


            final String finalGono = gono;

            editText.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getAction() == KeyEvent.ACTION_DOWN &&
                            (keyCode == KeyEvent.KEYCODE_ENTER)) {
                        if (editText.getText().toString().equals(finalGono))
                            a[0]++;
                        else
                            x[0]++

                    }
                    return false;
                }


            });
        }  while (a[0] > 2*x[0]);


    }
}
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы