我对处理具有多种存储的数据有点陌生,我不确定我是否做对了。
所以我有一个 6 行和 20 列的 CSV 文件。我解析它,然后将其读入数据库。(使用 OpenCSV)
当我拥有这个数据库时,我创建了它的哈希映射,并使用 SimpleAdapter 在 ListView 中显示它。
所说的列表视图有非常复杂的项目,每个项目都有大约 20 个文本视图(“点击展开”-y 的东西)
整个过程当然取决于数据库是否已经创建。
因此,如果数据库已经存在-> 如果数据库不存在,则仅读取数据库并进行列表映射,请执行整个 CSV-> 数据库-> 列表作业...
我的问题是它真的很慢。只做 6 行需要 13.1777 毫秒。这只是我的测试 CSV 文件,最终的应用程序必须处理数百行。
所以我的问题很简单:
我能让这件事变得更快吗?我觉得我把这件事复杂化了。
这是我的一些代码:
我在这里调用完成这项工作的两个函数:
public void showEszkoz() throws Exception {
Cursor c = databaseEszkoz.selectRecords();
System.out.println("row count: " + c.getCount());
if (c.getCount() == 0)
{
System.out.println("read csv to database to list");
readCsvIntoDatabase();
readDatabaseToList();
}
else
{
System.out.println("only database read to list");
readDatabaseToList();
}
}
这是读取 CSV 文件的函数:
public void readCsvIntoDatabase() throws IOException {
InputStream is = getResources().openRawResource(R.raw.eszkoz);
Reader myReader = null;
try {
myReader = new InputStreamReader(is, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
CSVReader reader = new CSVReader(myReader);
reader.readNext();
try {
while ((nextLine = reader.readNext()) != null) {
databaseEszkoz.createRecords(Integer.parseInt(nextLine[0]),
Integer.parseInt(nextLine[1]), nextLine[2],
nextLine[3], nextLine[4], nextLine[5], nextLine[6],
nextLine[7], nextLine[8], nextLine[9], nextLine[10],
nextLine[11], nextLine[12], nextLine[13], nextLine[14],
nextLine[15], nextLine[16], nextLine[17], nextLine[18],
nextLine[19], nextLine[20], nextLine[21], nextLine[22],
nextLine[23], nextLine[24], nextLine[25]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
这是读取数据库并将其显示在列表中的函数
public void readDatabaseToList() {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
Cursor c = databaseEszkoz.selectRecords();
c.moveToFirst();
while (!c.isAfterLast()) {
System.out.println("This is the current row:" + c.getString(0));
map = new HashMap<String, String>();
map.put("_id", c.getString(0));
map.put("ESZKOZ_ID", c.getString(1));
map.put("ESZKOZ_LELTARSZAM", c.getString(2));
map.put("ESZKOZ_EAN", c.getString(3));
map.put("ESZKOZ_LEIRAS", c.getString(4));
map.put("ESZKOZ_TIPUS", c.getString(5));
map.put("ESZKOZ_FOCSOPORT_KOD", c.getString(6));
map.put("ESZKOZ_CSOPORT_KOD", c.getString(7));
map.put("ESZKOZ_ALCSOPORT_KOD", c.getString(8));
map.put("ESZKOZ_LELTARCSOP_KOD", c.getString(9));
map.put("ESZKOZ_ALLELTARCSOP_KOD", c.getString(10));
map.put("ESZKOZ_HR_KOD", c.getString(11));
map.put("ESZKOZ_SZERVEZET_KOD", c.getString(12));
map.put("ESZKOZ_MENNYISEG", c.getString(13));
map.put("ESZKOZ_MENNYISEGI_EGYSEG", c.getString(14));
map.put("ESZKOZ_STATUSZ", c.getString(15));
map.put("ESZKOZ_AKTIVALT_ERTEK", c.getString(16));
map.put("ESZKOZ_NETTO_ERTEK", c.getString(17));
map.put("ESZKOZ_SZAMVITEL_KAT", c.getString(18));
map.put("ESZKOZ_MEGJEGYZES", c.getString(19));
map.put("ESZKOZ_BESZERZES_DATUM", c.getString(20));
map.put("ESZKOZ_GARANCIA_KEZD_VEG", c.getString(21));
map.put("ESZKOZ_GYARI_SZAM", c.getString(22));
map.put("ESZKOZ_LELTAR_MENNYISEG", c.getString(23));
map.put("ESZKOZ_LELTAR_ALLAPOT", c.getString(24));
map.put("ESZKOZ_LELTAR_MEGJEGYZES", c.getString(25));
mylist.add(map);
c.moveToNext();
}
c.close();
mSchedule = new SimpleAdapter(context, mylist, R.layout.row_eszkoz,
new String[] { "_id", "ESZKOZ_ID", "ESZKOZ_LELTARSZAM",
"ESZKOZ_EAN", "ESZKOZ_LEIRAS", "ESZKOZ_TIPUS",
"ESZKOZ_FOCSOPORT_KOD", "ESZKOZ_CSOPORT_KOD",
"ESZKOZ_ALCSOPORT_KOD", "ESZKOZ_LELTARCSOP_KOD",
"ESZKOZ_ALLELTARCSOP_KOD", "ESZKOZ_HR_KOD",
"ESZKOZ_SZERVEZET_KOD", "ESZKOZ_MENNYISEG",
"ESZKOZ_MENNYISEGI_EGYSEG", "ESZKOZ_STATUSZ",
"ESZKOZ_AKTIVALT_ERTEK", "ESZKOZ_NETTO_ERTEK",
"ESZKOZ_SZAMVITEL_KAT", "ESZKOZ_MEGJEGYZES",
"ESZKOZ_BESZERZES_DATUM", "ESZKOZ_GARANCIA_KEZD_VEG",
"ESZKOZ_GYARI_SZAM", "ESZKOZ_LELTAR_MENNYISEG",
"ESZKOZ_LELTAR_ALLAPOT", "ESZKOZ_LELTAR_MEGJEGYZES" },
new int[] { R.id.row_eszkoz_id, R.id.row_eszkoz_eszkoz_id,
R.id.row_eszkoz_leltar_szam, R.id.row_eszkoz_ean,
R.id.row_eszkoz_leiras, R.id.row_eszkoz_tipus,
R.id.row_eszkoz_focsoport_kod,
R.id.row_eszkoz_csoport_kod,
R.id.row_eszkoz_alcsoport_kod,
R.id.row_eszkoz_leltarcsoport_kod,
R.id.row_eszkoz_alleltarcsoport_kod,
R.id.row_eszkoz_hr_kod,
R.id.row_eszkoz_szervezeti_egyseg_kod,
R.id.row_eszkoz_mennyiseg,
R.id.row_eszkoz_mennyisegi_egyseg,
R.id.row_eszkoz_statusz,
R.id.row_eszkoz_aktivalt_ertek,
R.id.row_eszkoz_netto_ertek,
R.id.row_eszkoz_szamviteli_kategoria,
R.id.row_eszkoz_megjegyzes,
R.id.row_eszkoz_beszerzes_datuma,
R.id.row_eszkoz_garancia_kezd_veg,
R.id.row_eszkoz_gyari_szam,
R.id.row_eszkoz_leltarozott_allapot,
R.id.row_eszkoz_leltarozott_mennyiseg,
R.id.row_eszkoz_leltarozott_megjegyzes });
list.setAdapter(mSchedule);
}