2016-04-08 55 views
-2

我是Java和Android的新手。我正在編寫的應用程序的一部分從文件讀取項目數據,並在使用它填充ListView之前填充項目的ArrayList。創建對象的ArrayList會導致每個元素相同

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

} 

從Items.java:-

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

但是當我運行此我發現的ArrayList(和ListView)是所有項目的所有與從文件中讀取的最後一個相同。我試着調試這一點,並發現ArrayList中的所有項目都更改爲最後一個行後增加: -

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

請有人可以解釋爲什麼這是和如何解決它?

我以前在這個網站上檢查過Creating an ArrayList of Objects,發現我的ArrayList人口方法和建議的一樣。

回答

-1

我以前遇到過這個問題。當時我無法找到解決方案,所以我最終採取了一種不同的方法,即使用SQLite數據庫將有關項目的信息存儲在本地存儲中。我不確定這會對您有所幫助,但它是將數據存儲在常規文件中的可行方法。

+1

這無關他們的存儲。他們在'Item'類中顯然具有'static'變量而不是實例變量。 – Savior

+0

謝謝你。我確實考慮過這條路線,但現在我意識到這是不必要的。 – JimFitz

-1

Item類中的字段使用static會導致它們屬於該類,而不屬於該類的實例。 每次創建新項目時,都會將類字段重置爲新值。您的Item對象沒有任何特定於實例的數據延遲。

+0

非常感謝。這解決了這個問題。 – JimFitz

-1

在您的Item類中,可以看到變量類型爲static這可能是一個可能的原因。嘗試刪除static關鍵字在這種情況下,這些變量/屬性的值取決於對象的而不是常見的所有對象

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

希望這能解決你的問題上..

+0

非常感謝。這解決了這個問題。 – JimFitz

相關問題