2011-07-04 92 views
2

是否可以在應用程序中存儲列表,而不必擁有數據庫? 否則,什麼是最簡單的方法來存儲一個簡單的列表?是否有可能在android上沒有數據庫存儲?

+3

您可以隨時通過創建存儲數據一個文件。那有什麼問題? –

+2

列表中有什麼?字符串?這很容易,只需將字符串保存到文件中,然後單擊任何你想要的。如果它的對象嘗試序列化它們,請使用@mathiasnj和Cinquo – RMT

回答

3

我認爲這取決於你正在使用的列表中的內容幾個許多存儲能力。如果您的列表僅存儲「簡單對象」(如列表中的字符串列表整數或其他對象只有少數成員),您可以使用Android中內置的SharedPrefenrences。他們需要一個關鍵和價值。所以,如果你的列表中包含的5個對象 - 讓我們說點保持它的簡單 - 你可以將它們保存像

SharedPreferences.Editor editor = getSharedPreferences("YourListName", MODE_PRIVATE).edit(); 
for(int i = 0; i < YOUR_LIST.count() ; i++){ 
    Point p = YOUR_LIST.get(i); 
    editor.putInt("Element" + i + " X", p.x); 
    editor.putInt("Element" + i + " Y", p.y); 
} 
editor.commit(); 

再次收到此你可以只說

SharedPreferences prefs = getSharedPreferences("YourListName", MODE_PRIVATE); 
Map<String, ?> map = prefs.getAll(); 
+0

好,但我應該用變量'p'做什麼? – coffee

+0

哎呀,對不起,這是一個錯字。我假設它是一個List of Point,所以我將它更正爲p.x和p.y,因爲Point Object有兩個成員,int x,y。我將地圖中的地圖更正爲以清楚表明。所以替換Point並把你自己的Object放在裏面。 –

+0

好的!在這種情況下,您將不得不在Point對象中搜索關鍵字「Element2 X」,例如,對嗎?而且,我認爲'Map map = prefs.getAll()'不起作用,因爲'prefs.getAll()'返回一個映射 ...我想。 – coffee

1

Java允許您使用對象的序列化,方便的API。 Here有一個來自java網頁的技術文章。

+0

。看來[內部存儲](http://developer.android.com/guide/topics/data/data-storage.html#filesInternal)。這是一回事嗎? – coffee

+1

看起來內部存儲允許寫入應用程序的私有區域,如果只是您的應用程序需要它,這可能就是您可能需要的。當我指代序列化時,我的意思是讓一個方法能夠將特定格式的對象映射(並寫入)爲文件中的另一種格式(反序列化只是相反的操作)。格式可以是任何適合你的格式,在這種情況下,如果它是元素列表,則可以爲每個文件行放置一個元素。你也可以評估一些喜歡pickleing(cPickle庫)的東西。 – Cinquo

+0

謝謝你的回答。 – coffee

3

有幾種方法Data Storage在安卓 看看開發者園地,你有你需要的任何的所有信息:

Shared Preferences 店專用的鍵值對原始數據。

Internal Storage 將私人數據存儲在設備存儲器上。

External Storage 將共享數據存儲在共享外部存儲上。

SQLite Databases 將結構化數據存儲在專用數據庫中。

Network Connection 使用您自己的網絡服務器將數據存儲在網絡上。

如果您已經找到最適合您的需求的存儲空間,請隨時索要任何類型的存儲空間。

+0

我有一個對象列表(不是原語),並且想要存儲它們,即使我的應用程序被殺死了。所以,我想,「SQLite數據庫」是最好的選擇。 – coffee

+0

的確如此,我推薦一個sqlite數據庫。此外,您應該考慮使用ORM的選項,如http://ormlite.com/sqlite_java_android_orm.shtml – matiasnj

3

數據庫有多種持久性替代方案。僅舉幾例(與Java訪問),你可以

  • 使用簡單文件(serialisation,或其他配置格式 - 在這種情況下看看commons configuration
  • 寫XML內容(使用XML序列化 - 再次 - ?!?或其他機制,如XStreamJAXB,...)
  • 使用任何的NoSQL存儲(圖形數據庫,文檔數據庫,等等...)
  • 使用流行層(如space4j
  • 使用transactionnal dat商店(如JDBM

僅舉從Java

+1

Space4J還提供索引,包含4種不同類型的索引。看一看:http://forum.space4j.org/posts/list/5.page – TraderJoeChicago

相關問題