2012-04-12 59 views
2

我想在一些活動之間提供一些數據,就像網站上的購物車一樣。如何在Android中的活動之間存儲數據?,購物車如

這些數據可能是字符串的集合,也許是列表,地圖或類似的東西。每個項目應該有一個ID,數量,類型和文本註釋(關於最後一個不確定)關聯

重點是它不需要在會話結束後持久化,並且此數據將在整個會話中被完全刪除並重新創建多次。

問題是: 是使用SharedPreferences?數據庫的最佳選擇?

謝謝!

回答

3

更好的選擇是通過工廠對象定位的一些單例Java集合(地圖或列表)。只是存儲您的購物車有與數據庫或偏好在所有

不打擾你決定使用偏好的情況下,我可以我的電子書籍的小數據綁定庫:

https://github.com/ko5tik/andject

+0

通常這是解決方案,我一起去除了存儲任何我想確保數據庫或共享偏好的數據。 – 2012-04-12 20:18:35

+0

您的意思是創建一個具有自定義對象集合的類? – giorgiline 2012-04-12 20:38:06

+1

你可以做到這一點,或者你可以讓你的集合存儲在應用程序對象(http://developer.android.com/reference/android/app/Application.html) – 2012-04-12 20:52:13

0

Use Bundle或意圖。

我不會推薦使用數據庫來達到這個目的。數據庫需要正確打開和關閉。在活動中傳遞數據的地方,哪個活動應該是關閉數據庫的最後一個活動,並且可能導致泄漏。如果您只是將這些數據從一個活動傳遞到另一個活動,請創建一個Bundle,並在開始下一個活動時將其附加到Intent。

0

SharedPreferences適用於存儲簡單的鍵/值對和少量數據,但是,我想你的購物車對象可能比這更復雜一點。出於這個原因,我可能會使用SQLite數據庫。如果你沒有複雜的數據,而你只想存儲一些簡單的東西,那麼Shared Preferences應該可以。

+0

是的,我應該丟棄共享首選項 – giorgiline 2012-04-12 20:41:24

0

SharedPreferences是鍵值對,而Android中的數據庫是SQLite,它們在會話之後都會持續存在。您可以對SQLite數據庫執行任意數量的操作,並在下一次會話期間使用相同的文件。 如果您需要針對您的特定使用案例進行更多說明,您可以提出意見。

1

最簡單的方法是使用聲明瞭公共靜態變量的類,並從任何活動中將它們設置爲它們,並通過靜態引用(即MyContantsClass)調用將該值保存在任何其他活動中。StaticVar1像

class MySessionVars 
{ 
     public static int MyVar1; 
} 

在第一項活動

{ 
    MySessionVars.NyVar1=10; 
} 

,並從任何其他活動

{ 
    Var = MySessionVars.NyVar1; 
} 

這是最簡單的方法,並保留瓦爾直到應用程序被關閉

0

人可能說話關於使用全局數據或將值存儲在sharedpreference中,但根據我的經驗,免費的方法是創建一個單獨的類,並將變量或數組列表聲明爲public static,然後通過引用classname.variable名稱在整個項目中使用它們。 class global

{ 
    public static arrayList<String> my; 
} 
您的任何活動

global.my

這是最簡單的方法,我發現至今!

1

您可以使用Gson(由谷歌)發送和接收任何數據btw活動,甚至類對象。


發送:(FirstActivity)

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
Gson gson = new Gson(); 
intent.putExtra("CustomClassObject", gson.toJson(object)); 
startActivity(intent); 

接收:(SecondActivity)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_second); 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) 
    { 
     Gson gson = new Gson(); 
     CustomClass object = gson.fromJson(extras.getString("CustomClassObject"), CustomClass.class); 
    } 
    //... 
} 
相關問題