0

我对处理具有多种存储的数据有点陌生,我不确定我是否做对了。

所以我有一个 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);
}
4

0 回答 0