0

複数の種類のストレージでデータを処理するのは初めてで、これが正しいかどうかわかりません。

だから私は6行と〜20列のCSVファイルを持っています。それを解析してから、データベースに読み込みます。(OpenCSV を使用)

このデータベースができたら、そのハッシュ マップを作成し、SimpleAdapter を使用して ListView に表示します。

上記のリストビューにはかなり複雑なアイテムがあり、それぞれに約20個のテキストビューがあります(「クリックして展開」-yのもの)

もちろん、データベースがすでに作成されているかどうかに応じて、すべてが実行されます。

したがって、データベースが既に存在する場合->データベースのみを読み取り、データベースが存在しない場合はリストマッピングを実行し、CSV->データベース->リストジョブ全体を実行します...

私の問題は、それが本当に遅いということです。6 行だけを実行すると、13.1777 ミリ秒かかります。これは私のテスト CSV ファイルにすぎません。最終的なアプリでは数百行を処理する必要があります。

だから私の質問は簡単
です.これをもっと速くすることはできますか? 私はこれを複雑にしすぎているように感じます。

ここに私のコードの一部があります:

ここでは、ジョブを実行する 2 つの関数を呼び出しています。

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