2012-07-24 15 views
6

Uygulamam çalışırken List<String[]> tutmanın en iyi yolu nedir? Yaklaşımımla ilgili sorunlar yaşıyorum. Çoğu zaman liste çok büyük olduğu için bana OutOfMemory Hatası veriyor.android, büyük bir liste nasıl saklanır <String[]> uygulama çalışırken

List<String[]> çevrimiçi indirdiğim bir csv dosyasını ayrıştırmanın sonucudur.

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

... daha sonra farklı faaliyetleri ClassName.sched eriş: Ne yapmam gibi statik bir sınıf üyesi onun sonucu kaydetmek sonra bir etkinlikte csv ayrıştırmak olduğunu.

Bunu yaptığım gibi, ayrıştırılan veriler her etkinlikte kullanılabilir olacak ... Ve tekrar ayrıştırmak zorunda değilim. Bunu geliştirmek için ne yapabilirim?

+1

önlemek için uygulanabilecek Bu şekilde olmaz. Ayrıca düzgünlük ve hız elde etmenize yardımcı olacaktır. –

+1

Bir hizmette tutuyor ve verileri hizmetler ve etkinlik yardımları arasında iletiyor mu? – Gogu

+0

Ayrıştırılan değerleri "Koleksiyon" bir "HashTable" veya "ArrayList" gibi depolıyor musunuz? – Abhilasha

cevap

1

Bence 2 yaklaşımınız olabilir.

  1. Sen bir veritabanı oluşturmak ve verileri kaydetmek dosyayı kaydetmek ve tembel yükleme yolu
  2. bunu ayrıştırmak.

Veri tabanı oluşturmanızı öneririm, bu zor değildir ve verilerinizi iyi yönetmenizi sağlar. İmleç ile kolayca tembel yükleme yapabilir veya bir ORM (ORMLite/Greendao) kullanabilirsiniz. Bence bu en iyi yoldur ve verilerinizi en hızlı şekilde yükleyebilirsiniz.

Bu yardımcı olur umarım.

+0

Anladığım kadarıyla tembel yükleme, her şeyi bir anda almak ve görüntülemek zorunda kalmamanız halinde iyi çalışır ... ama benim durumumda, tüm csv dosyasını geçmek çok önemlidir çünkü ihtiyaç duyduğum sonuçlar bir programa dayanmaktadır. Dosyadaki varlığı .. Ancak, bunun için bir veritabanı oluşturma hakkında okumaya çalışacağım. Keşke zor olmadı. Ben csv dosyasını ilk kez gördüğümde ama yukarıda söylediğim yaklaşımı kullandığını düşündüm ... – yojoannn

+0

Bu biraz iş, ama pişman olmayacaksınız;) – AMerle

1

Sadece Paresh'in yorumuna eklemek için. Uygulamamda kullandığım benzer bir şey önerebilirim. Örneğin, bir mağazadaki Öğelerin listesini görüntülemek istiyorum. (Her öğenin kimliği, adı ve maliyeti olacaktır).

Bunu başarmak için önce sunucuya öğe numarası almak için bir istekte bulunun, itemCount. Şimdi ben sadece 100 ürün görüntülenir ve bir sonraki button sonraki seti indirmek için eklenebilir belirten bir uyarı görüntüler, 100. ITEMCOUNT 100'den büyük olan ise söylemek sayfada görüntülendiği öğelerin sayısı için bir sınır belirleyebilirsiniz öğelerin Veya bir arama ise, kullanıcının geri dönüp aramayı düzeltmesini isteyebilirsiniz. ITEMCOUNT 100'den az olan o zaman herhangi bir sorun

Çağrı işlevselliği "Daha yükleniyor ..." ile Çağrı Mekanizması uygulanır mı OutOfMemory sorunları

+0

Ah ... Sanırım yapamam Bunu yapın (gerçekten emin değil ..) Görüyorsun, benim app csv dosyasında biçimlendirilmiş program ayrıntılarını döndürür. Her zaman bir program aradığımda, doğru sonuçları vermek için tüm csv'den geçmek zorundayım. Ayrıca, istemci çevrimdışı olsa bile uygulamanın kullanılabilir olmasını gerektirir ... – yojoannn

+1

O zaman ben her şeyi bir kez donwload sanırım, ayrıştırmak ve Veritabanında kaydetme, çalışma zamanı belleğinde (OutOfMemory neden olan) her şeyi tutmaktan daha iyidir. gösterilmesi gerekiyordu. Veritabanını tasarlarken veriyi birden fazla tablo halinde kategorilere ayırabilmeniz için çok fazla zaman harcayamazsınız. Bu yol, _offline_ – Abhilasha

+0

sanırım bile işe yarayabilir ... Zaman ayırdığınız için teşekkürler! :) – yojoannn

İlgili konular