6

List<String[]>アプリケーションの実行中に保持する最良の方法は何ですか? 私のアプローチに問題があります。リストが大きすぎるため、ほとんどの場合 OutOfMemory エラーが発生します。

これList<String[]>は、オンラインでダウンロードした csv ファイルを解析した結果です。私がしているのは、アクティビティで csv を解析し、その結果を次のような静的クラス メンバーに保存することです。

String url = "http://xxx/pdf/pms/pms_test.csv";
try {
    InputStream input = new URL(url).openStream();
    CSVReader reader = new CSVReader(new InputStreamReader(input));
    SchedController.sched = reader.readAll();
    input.close();
} 

...次にClassName.sched、さまざまなアクティビティにアクセスします。

これを行っているのは、解析されたデータがすべてのアクティビティで利用できるようにするためです...そして、再度解析する必要はありません。改善するにはどうすればよいですか?

4

2 に答える 2

1

パレシュのコメントに追加するだけです。アプリで使用したのと同じようなものを提案できます。

たとえば、ストア内のアイテムのリストを表示する必要があります。(各アイテムにはID、名前、コストが含まれます)。

これを実現するために、最初にサーバーにリクエストを送信して、itemCountなどのアイテムの数を取得します。ここで、ページに表示されるアイテムの数に100などの制限を設定しました。itemCountが100より大きい場合、100個のアイテムのみが表示され、次buttonのアイテムのセットをダウンロードするために次を追加できるというアラートを表示します。または、検索の場合は、ユーザーに戻って検索を絞り込むように依頼できます。itemCountが100未満の場合、問題は発生しません。

このようにして、ページングOutOfMemoryを実装して問題を回避できます

于 2012-07-24T09:23:57.950 に答える
1

私はあなたが2つのアプローチを持つことができると思います。

  1. ファイルを保存し、遅延読み込み方法で解析します
  2. データベースを作成し、データを保存します。

データベースを作成することをお勧めします。これは難しくなく、データを適切に管理できるようにします。カーソルを使用して簡単に遅延読み込みを実行するか、ORM(ORMLite / Greendao)を使用できます...これがデータを読み込むための最良の方法であり、最速だと思います。

これがお役に立てば幸いです。

于 2012-07-24T09:18:12.643 に答える