2016-04-08 13 views
-2

Java ve Android'de yeniyim. Yazdığım bir uygulamanın parçası, bir dosyadan öğe verilerini okur ve bir ListView doldurmak için kullanmadan önce öğelerin bir ArrayList öğesini doldurur. Bunu çalıştırdığınızda Items.java:-Nesnelerin bir Dizisi Oluşturulması, her öğenin aynı olmasına neden olur.

public class Item { 
    private static int idInt; 
    private static String description; 
    private static Image image; 

    public Item(int idInt, String description) { 
     this.idInt = idInt; 
     this.description = description; 
     this.image = image; 
    } 
} 

ama ArrayList (ve ListView) tüm öğeleri doludur bulmak itibaren main.java:-

public class MainActivity extends AppCompatActivity { 
    public static ArrayList<Item> items; 
    . 
    . 
    . 
    private void ReadItemsFile() throws IOException { 

     File itemsFile = new File(itemsFilenameString); 
     items = new ArrayList<Item>(); 

     try (BufferedReader itemsBufferedReader = new BufferedReader(new FileReader(itemsFile))) { 
      for (String line; (line = itemsBufferedReader.readLine()) != null;) { 
       String[] lineStrings = line.split("\t|\n", 2); 
       int itemNo = Integer.parseInt(lineStrings[0]); 

       items.add(new Item(itemNo, lineStrings[1])); 

      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

itibaren

dosyadan okunan son ile aynıdır. Ben ArrayList tüm öğeler satırdan sonra eklenen sonuncusuna değiştirildiğini bu hata ayıklama çalıştı ve buldum: - Bu nasıl bunu düzeltmek için neden

items.add(new Item(itemNo, lineStrings[1])); 

birisi açıklayabilir miyiz?

Bu sitede daha önce Creating an ArrayList of Objects numaralı telefonu kontrol ettim ve ArrayList nüfus yöntemim ile aynı olmasını önerdim.

cevap

-1

Daha önce bu soruna girdim. O zamanlar bir çözüm bulamadım, bu yüzden farklı bir yaklaşım benimsemeye başladım. Bu, ürünlerimin yerel depolamadaki bilgilerini saklamak için bir SQLite veritabanı kullanmaktı. Bunun size yardımcı olduğundan emin değilim, ancak normal dosyalardaki verilerin saklanması için uygun bir alternatif.

+1

Bu ile ilgisi yoktur .. yerine tüm nesneler için bu sorunu çözer

public class Item { private int idInt; private String description; private Image image; public Item(int idInt, String description,Image image) { this.idInt = idInt; this.description = description; this.image = image; } 

Umut ortak olma nesneye bağlıdır onların depolama. "Item" sınıfında örnek değişkenler yerine açıkça "static" değişkenleri vardır. – Savior

+0

Bunun için teşekkürler. Aslında bu rotayı düşündüm ama şimdi gereksiz olduğunu anlıyorum. – JimFitz

-1

Item sınıfındaki alanlar için static'u kullanmanız, bunların sınıfın örneğine değil, sınıfa ait olmalarına neden olur. Her yeni öğe oluşturduğunuzda, sınıf alanlarını yeni değerlere sıfırlarsınız. Item nesneleriniz, bildirilen örneğe özgü bir veri içermiyor.

+0

Çok teşekkürler. Bu problemi çözdü. – JimFitz

-1

Öğe sınıfınızda, olası bir neden olabilecek statik türünde değişkenleri görebilirsiniz. Bu senaryoya göre statik anahtar kelimeyi kaldırmayı deneyin, bu değişkenler/özellikler değerleri

+0

Çok teşekkürler. Bu problemi çözdü. – JimFitz

İlgili konular