2012-07-24 2 views
6

Was ist der beste Weg, um eine List<String[]> zu behalten, während meine Anwendung läuft? Ich habe Probleme mit meinem Ansatz. Es gibt mir die meiste Zeit einen OutOfMemory Error, da die Liste zu groß ist.android wie man große Liste hält <String[]> während Anwendung läuft

Die List<String[]> ist das Ergebnis der Analyse einer csv-Datei, die ich online heruntergeladen habe. Was ich tue, ist die CSV in einer Aktivität analysiert dann das Ergebnis in einem statischen Klasse Mitglied speichern wie:

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(); 
} 

... dann ClassName.sched Zugriff auf verschiedene Aktivitäten.

Ich mache dies, damit die geparsten Daten in jeder Aktivität verfügbar sind ... Und ich muss nicht erneut analysieren. Was kann ich tun, um es zu verbessern?

+1

Sollte gelten Paging-Mechanismus mit „Laden“, Mehr ... Funktionalität zu vermeiden. Es wird Ihnen helfen, Glätte und Geschwindigkeit auch zu erreichen. –

+1

Würde es in einem Dienst halten und die Daten zwischen Diensten und Aktivitäten weiterleiten? – Gogu

+0

Speichern Sie die geparsten Werte in einer 'Collection' wie eine' HashTable' oder 'ArrayList'? – Abhilasha

Antwort

1

Ich denke, dass Sie zwei Ansätze haben können.

  1. Sie speichern die Datei und es in einem faulen Laden Art und Weise analysieren
  2. Sie erstellen eine Datenbank und Ihre Daten speichern.

Ich empfehle Ihnen, eine Datenbank zu erstellen, das ist nicht schwierig und lassen Sie Ihre Daten gut verwalten. Sie können leicht mit dem Cursor lazyLoading, oder verwenden Sie ein ORM (ORMLite/Greendao) ... Ich denke, das ist der beste Weg und der schnellste, um Ihre Daten zu laden.

Hoffe, das wird Ihnen helfen.

+0

Von was ich verstehe, funktioniert Lazy Loading gut, wenn Sie nicht alles auf einmal anzeigen müssen ... aber in meinem Fall ist das Durchlaufen der gesamten CSV-Datei von entscheidender Bedeutung, da die Ergebnisse, die ich brauche, auf einem Zeitplan basiert Präsenz in der Datei .. Ich werde jedoch versuchen, über das Erstellen einer Datenbank dafür zu lesen. Ich wünschte, es wäre nicht schwer. Ich dachte daran, als ich das erste Mal die CSV-Datei sah, aber stattdessen den oben genannten Ansatz verwendete ... – yojoannn

+0

Es ist ein bisschen Arbeit, aber Sie werden es nicht bereuen;) – AMerle

1

Nur um Pareshs Kommentar hinzuzufügen. Ich kann etwas vorschlagen, das ich in meiner App verwendet habe.

Zum Beispiel muss ich Liste der Elemente in einem Geschäft anzeigen. (Jeder Artikel wird ID, Name und Kosten haben).

Um dies zu erreichen, erstelle ich zuerst eine Anfrage an den Server, um die Anzahl der Elemente zu erhalten, sagen itemCount. Jetzt setze ich eine Grenze für die Anzahl der auf einer Seite angezeigten Elemente, sagen 100. Wenn die itemCount ist größer als 100, zeige ich eine Warnung sagen nur 100 Elemente werden angezeigt und eine nächste button kann hinzugefügt werden, um nächsten Satz herunterladen von Gegenständen. Oder wenn es eine Suche ist, können Sie den Benutzer bitten, zurückzugehen und die Suche zu verfeinern. Wenn ItemCount weniger als 100, dann werden Sie keine Probleme haben

Auf diese Weise Paging umgesetzt werden können OutOfMemory Probleme

+0

Ah ... Ich denke, ich kann nicht mach das (nicht wirklich sicher ..) Sie sehen, meine App gibt Zeitplandetails zurück, die in der CSV-Datei formatiert sind. Jedes Mal, wenn ich nach einem Zeitplan suche, muss ich durch den gesamten CSV gehen, um die richtigen Ergebnisse zurückzugeben. Außerdem benötigt der Client die App auch dann, wenn sie offline ist ... – yojoannn

+1

Dann denke ich, dass alles einmal heruntergeladen, analysiert und in der Datenbank gespeichert wird, ist besser, als alles im Runtime-Speicher zu behalten (was OutOfMemory verursacht) benötigt um angezeigt zu werden. Möglicherweise können Sie beim Entwerfen der Datenbank Daten in mehreren Tabellen kategorisieren, so dass Sie nicht zu viel Zeit filter es verbringen. Auf diese Weise kann App funktionieren, selbst wenn es _offline_ – Abhilasha

+0

ist, denke auch so ... Danke für Ihre Zeit! :) – yojoannn

Verwandte Themen