0

目標: テキスト ファイルから値を取得し、それを値に格納して、sqlite データベースにロードします。

問題: 私の方法は効率的ではありません。より簡単な方法を考え出す手助けが必要です。

現在、このようなテキストファイルを解析しています。

agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone
1,"NJ TRANSIT BUS","http://www.njtransit.com/",America/New_York,en,""
2,"NJ TRANSIT RAIL","http://www.njtransit.com/",America/New_York,en,""

コンマを読み取るたびに解析し、その値を変数に格納してから、その変数をデータベース値として使用します。

この方法は機能しますが、時間がかかります。次に読み込むテキスト ファイルには 200 行以上のコードが含まれているため、もっと簡単な方法を見つける必要があります。

AgencyString = readText();
        tv = (TextView) findViewById(R.id.letter);

        tv.setText(readText());

        StringTokenizer st = new StringTokenizer(AgencyString, ",");

        for (int i = 0; i < AgencyArray.length; i++) {
            size = i; // which value i am targeting in the textfile 
//ex. 1 would be agency_id, 2 would be agency_name
            AgencyArray[i] = st.nextToken();
        }
        tv.setText(AgencyArray[size]);  //the value im going to store into database value
    }

    private String readText() {
        InputStream inputStream = getResources().openRawResource(R.raw.agency);

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        int i;
        try {
            i = inputStream.read();
            while (i != -1) {
                byteArrayOutputStream.write(i);
                i = inputStream.read();
            }
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return byteArrayOutputStream.toString();

    }
4

2 に答える 2

1

まず、なぜこれが問題なのですか?いわば質問であなたの質問に答えるつもりはありませんが、あなたがしていることの効率をどのように改善する必要があるかを理解するには、より多くの文脈が必要です. ファイルの解析によるアプリケーションの遅延が認識されていますか、それとも UI スレッドで実行しているため、より深刻な ANR 問題がありますか? 示されていない他のコードにボトルネックがない限り、あなたが現在行っているよりも速くそれを読んでトークン化するとは思えません。ええと、実際には、間違いなくできるでしょう。ただし、大規模なデータのフェッチと解析に伴う遅延がユーザーに認識されたり、ユーザーに苛立ちを与えたりしないようにアプリケーションを設計する場合の方が多いと思います。私自身のアプリケーションは、このような大量のファイルを解析し、ほんの一瞬しかかかりませんが、そうではありません。アプリケーション全体と UI の設計に起因する問題が発生することはありません。また、プロファイラーを使用して何が時間がかかっているかを確認しましたか? また、デバッガを接続せずに、実際のデバイスでこれを実行しましたか? 実際のデバイスにデバッガーを接続したり、シミュレーターを使用したりすると、実行時間が数桁も大幅に増加します。

このファイル タイプは、ネットワーク経由で受信した後に解析する必要があると想定しています。これは、アプリケーションにバンドルされていて一度だけ解析する必要があるものとは対照的です。

于 2012-08-17T19:41:23.133 に答える
0

テキスト ファイルで表現する代わりに、SQLite データベースをアプリケーションにバンドルすることができます。この質問の答えを見てください

于 2012-08-17T19:37:57.210 に答える