Мой курсор показывает только 5 элементов, импортированных из базы данных sqlite - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь создать приложение для викторины, извлекающее данные из предварительно заполненной базы данных. Я использую базу данных и databaseHelperClass. Все извлеченные данные загружаются в класс модели, проблема в том, что в базе данных 15 элементов (изначально было 5 элементов, а затем я добавил 10 с использованием браузера sqlite), но курсор будет загружать только 5 элементов.

Класс моей базы данных помощников:

public class QuestionsDatabaseHelper extends SQLiteOpenHelper {

String DB_PATH = null;
private static String DB_NAME = "QuizQuestions";
private SQLiteDatabase myDataBase;
private final Context myContext;

public QuestionsDatabaseHelper(Context context) {
    super(context, DB_NAME, null, 10);
    this.myContext = context;
    this.DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/";
    Log.e("Path 1", DB_PATH);
}


public void createDataBase() throws IOException {
    boolean dbExist = checkDataBase();
    if (dbExist) {
    } else {
        this.getReadableDatabase();
        try {
            copyDataBase();
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
    }
}

private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;
    try {
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) {
    }
    if (checkDB != null) {
        checkDB.close();
    }
    return checkDB != null ? true : false;
}

private void copyDataBase() throws IOException {
    InputStream myInput = myContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream myOutput = new FileOutputStream(outFileName);
    byte[] buffer = new byte[10];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }
    myOutput.flush();
    myOutput.close();
    myInput.close();

}

public void openDataBase() throws SQLException {
    String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

}

@Override
public synchronized void close() {
    if (myDataBase != null)
        myDataBase.close();
    super.close();
}


@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (newVersion > oldVersion)
        try {
            copyDataBase();
        } catch (IOException e) {
            e.printStackTrace();

        }
}

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
    return myDataBase.query(table, null, null, null, null, null, null);
}

Класс модели:

public class Questions {

public Questions() {
}

public ArrayList<String> getChoice1() {
    return choice1;
}

public ArrayList<String> getChoice2() {
    return choice2;
}

public ArrayList<String> getChoice3() {
    return choice3;
}

public ArrayList<String> getChoice4() {
    return choice4;
}

public ArrayList<String> getAnswers() {
    return answers;
}

public ArrayList<String> getQuestions() {

    return questions;
}

private Cursor c = null;
private ArrayList<String> choice1 = null;
private ArrayList<String> choice2 = null;
private ArrayList<String> choice3 = null;
private ArrayList<String> choice4 = null;
private ArrayList<String> questions = null;
private ArrayList<String> answers = null;


public void setDataToQuestions(Context context, String player) {
    questions = new ArrayList<>();
    answers = new ArrayList<>();
    choice1 = new ArrayList<>();
    choice2 = new ArrayList<>();
    choice3 = new ArrayList<>();
    choice4 = new ArrayList<>();

    QuestionsDatabaseHelper myDbHelper = new QuestionsDatabaseHelper(context);
    try {
        myDbHelper.createDataBase();
    } catch (IOException ioe) {
        throw new Error("Unable to create database");
    }
    try {
        myDbHelper.openDataBase();
    } catch (SQLException sqle) {
        throw sqle;
    }

    Toast.makeText(context, "Successfully Imported", Toast.LENGTH_SHORT).show();
    c = myDbHelper.query("ronaldo", null, null, null, null, null, null);
    if (c.moveToFirst()) {
        do {

            questions.add(c.getString(1));
            answers.add(c.getString(2));
            choice1.add(c.getString(3));
            choice2.add(c.getString(4));
            choice3.add(c.getString(5));
            choice4.add(c.getString(6));
        } while (c.moveToNext());
    }
            c.close();
    myDbHelper.close();
    Toast.makeText(context, "Successfully Imported" + c.getCount(), Toast.LENGTH_SHORT).show();


}

Моя база данных: стол Роналду Моя база данных хранится в папке активов.

Я новичок в разработке Android, и ваша помощь будет принята с благодарностью ...

1 Ответ

0 голосов
/ 29 апреля 2018

Файл в папке ресурсов будет применяться только в том случае, если база данных не существует.

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

Это можно сделать, удалив данные приложения или удалив приложение и повторно запустив приложение.

т.е. весь процесс должен быть: -

  1. Исправить базу данных в браузере БД для SQLite.
  2. Заменить файл базы данных в папке ресурсов на исправленную версию.
  3. Удалить данные приложения или удалить приложение.
  4. Перезапустите приложение.
...