美好的一天, 我一直在研究一个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);
}
}
这里,length是整个问题数据库的大小,用于课程(由getCourseTag()表示)。代码工作得很好。但它需要整整8-9秒!!加载活动。如何减少加载时间的任何帮助将不胜感激。
答案 0 :(得分:1)
你做这件事的方式非常有效,可以减慢一切(你的助手可以帮助你解决很多问题):
Local queue
在每个这样的行中,你执行一个查询,创建一个包含整个表格的2D数组,然后扔掉几乎所有东西。 而您未能关闭String no= myDbHelper.getSome(ques,0, getCourseTag());
。
所以你需要一个表中的12个值,而不是读整个表12次。