我有一个活动中的代码来从数据库中收集数据。活动打开需要5秒钟。没有这个,活动需要2秒钟才能打开。有没有一种方法来优化此代码?Android的SQL游标很慢
所有数组(包括循环中的一个:arr_calllog_name0)在我的手机上有61个项目。在模拟器中它很快,有6个项目。
for (int i=0; i<arr_calllog_name0.size(); i++)
{
Cursor crname = info.getAllTitles_Stats2A(arr_calllog_name0.get(i), "1", d1, d2);
crname.moveToFirst();
count_in = crname.getInt(0);
arr_calllog_numberin0.add(String.valueOf(count_in));
Cursor crname2 = info.getAllTitles_Stats2A(arr_calllog_name0.get(i), "2", d1, d2);
crname2.moveToFirst();
count_out = crname2.getInt(0);
arr_calllog_numberout0.add(String.valueOf(count_out));
Cursor crname3 = info.sumAllTitles_StatsA(arr_calllog_name0.get(i), "1", d1, d2);
crname3.moveToFirst();
sum_in = crname3.getInt(0);
arr_calllog_durationin0.add(String.valueOf(sum_in));
Cursor crname4 = info.sumAllTitles_StatsA(arr_calllog_name0.get(i), "2", d1, d2);
crname4.moveToFirst();
sum_out = crname4.getInt(0);
arr_calllog_durationout0.add(String.valueOf(sum_out));
}
信息被声明为HotOrNot info = new HotOrNot(ChartsDuration.this);
其中HotOrNot是包含DbHelper类扩展SQLiteOpenHelper类。
一个查询(另一种是几乎相同)
public Cursor getAllTitles_Stats2A(String name, String type, String date1, String date2) {
return ourDatabase.rawQuery("SELECT COUNT(*) FROM " + DATABASE_TABLE + " WHERE " + KEY_DATE + " BETWEEN '" + date1 + "'" + " AND '" + date2 + "'" + " AND " + KEY_NAME + " = '" + name + "'" + " AND " + KEY_TYPE + " = '" + type + "'" + " COLLATE NOCASE", null);
}
的DATABASE_TABLE有我的电话500个项目。
如果您对每个“item”(无论“item”是什么)执行四个查询,并且有61个“items”,那可能会很慢。然而,因为我们不知道'info'是什么,所有这些查询都是什么,你正在查询什么,'arr_calllog_name0'是什么,为什么你认为你需要运行所有这些查询,等等,这是不可能的任何人都可以真正帮助你。 – CommonsWare
我已更新我的问题。 – erdomester