Good Day, Я работаю над обновлением в проекте Android и сталкивался с проблемой. Я должен прочитать вопросы из базы данных SQLite, которые я сделал успешно, загружая его в многомерный массив, как показано ниже в моей базе данных вспомогательного класса:Получение значений из многомерного массива слишком медленно
public String getSome(int s,int t, String Table_Name){
String selectQuery = "SELECT * FROM " + Table_Name;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
int rows = cursor.getCount();
int num=0;
int col = 0;
String[][] base = new String[rows][13];
if (cursor.moveToFirst()) {
do {
for (col=0;col<13;++col){
base[num][col] = (cursor.getString(col));}
++num;
} while (cursor.moveToNext());
return base[s][t];
}
return null;
}
С, что сделано, я прочитал вопросы, как, например в моем вопросе класса:
public void database_calls(){
setCourseTag(courseTag);
myDbHelper = new DataBaseHelper(getActivity());
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
}catch(SQLException sqle){
throw sqle;
}
String no= myDbHelper.getSome(ques,0, getCourseTag());
String qu = myDbHelper.getSome(ques,1, getCourseTag());
String a = myDbHelper.getSome(ques,2, getCourseTag());
String b = myDbHelper.getSome(ques,3, getCourseTag());
String c = myDbHelper.getSome(ques,4, getCourseTag());
String d = myDbHelper.getSome(ques,5, getCourseTag());
ans = myDbHelper.getSome(ques,6, getCourseTag());
img = Integer.parseInt(myDbHelper.getSome(ques,8, getCourseTag()));
exp = myDbHelper.getSome(ques,9, getCourseTag());
year = myDbHelper.getSome(ques,10, getCourseTag());
questionImage = myDbHelper.getSome(ques,11, getCourseTag());
length = myDbHelper.getMax(getCourseTag());
}
так недавно, я пытался использовать year
столбец (т.е. столбец 10), чтобы претендовать на вопросы, выбранные для каждой викторины сессии, так что пользователь может выбрать вопросы с любого года он/она хочет попытаться. Чтобы сделать это, я использовал цикл в начале действия, чтобы отфильтровать только требуемые годы прошлых вопросов. Тогда я передал индексы каждого вопроса к набору, bal
, откуда он повторяется и так далее ..
public void countYearQuestions(){
for(int y = 0; y < length; ++y){
//year = myDbHelper.getSome(y,10, getCourseTag());
if (selectedYear.equals(myDbHelper.getSome(y,10, getCourseTag())))
bal.add(y);
}
}
Здесь длина размер всей базы данных вопросов, для курса, (указывается getCourseTag()). Код работает вполне нормально. Но это занимает целых 8-9 секунд! для загрузки. Любая помощь по сокращению времени загрузки будет оценена по достоинству.
Почему массив? Почему бы вам не позволить базе данных делать фильтрацию для вас? –
@CL. omg, я не думал об этом. Таким образом, по сути, я могу просто выполнить фильтрацию из sqlite db в классе помощника DB. Я считаю, что это должно ускорить процесс, верно? –