2

我想在一些活动之间提供一些数据,就像网站上的购物车一样。

这些数据可能是字符串的集合,可能是列表、地图或类似的东西。每个项目都应该关联一个 id、数量、类型和一个文本注释(关于最后一个还不确定)

关键是它不需要在会话结束后持久化,并且在整个会话中这些数据将被删除并完全重新创建很多次。

问题是: 最好的选择是使用SharedPreferences?,一个数据库?

谢谢!

4

7 回答 7

3

更好的选择是通过工厂对象定位的一些单例 Java 集合( map 或 list )。只需将您的购物车存放在那里,根本不用担心数据库或偏好

如果您决定使用首选项,我可以推荐我的小型数据绑定库:

https://github.com/ko5tik/andject

于 2012-04-12T20:12:45.703 回答
1

最简单的方法是使用一个声明了公共静态变量的类,然后从任何活动中设置它们,并通过调用静态引用即 MyContantsClass.StaticVar1 来检索在任何其他活动中保存的值

class MySessionVars
 {
      public static int MyVar1;
 }

在第一个活动中

{
   MySessionVars.NyVar1=10;
}

以及任何其他活动

{
    Var = MySessionVars.NyVar1;
}

这是最简单的方法,并且会保留 vars 直到应用程序关闭

于 2012-04-12T21:17:39.660 回答
1

您可以使用Gson(由 Google 提供)发送和接收任何数据 btw 活动,甚至是类对象。


发送:(FirstActivity)

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

接收:(第二个活动)

@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);
    }
    //...
}
于 2015-04-23T10:29:16.917 回答
0

使用捆绑或意图。

我不建议为此目的使用数据库。数据库需要正确打开和关闭。在数据通过活动传递的情况下,哪个活动应该是最后一个关闭数据库的活动可能会变得混乱,并可能导致泄漏。如果您只是将这些数据从一个 Activity 传递到另一个 Activity,请创建一个 Bundle,在您开始下一个 Activity 时将其附加到 Intent。

于 2012-04-12T20:15:09.443 回答
0

SharedPreferences 非常适合存储简单的键/值对和少量数据,但是,我想您的购物车对象可能比这更复杂一些。出于这个原因,我可能会使用 SQLite 数据库。但是,如果您没有复杂的数据,并且只想存储一些简单的东西,那么应该使用共享首选项。

于 2012-04-12T20:15:11.517 回答
0

SharedPreferences 是键值对,而 Android 中的数据库是 SQLite,两者都在会话后持续存在。您可以在 SQLite 数据库上执行任意数量的操作,并在下一个会话期间使用相同的文件。如果您需要对您的特定用例进行更多说明,您可以对我的答案发表评论。

于 2012-04-12T20:15:11.360 回答
0

人们可能会谈论在 sharedpreference 中创建全局数据或存储值,但根据我的经验,最简单的方法是创建一个单独的类,将变量或数组列表声明为 public static,然后通过引用类名在整个项目中使用它们。变量的名称。 class global

{
   public static arrayList<String> my;
}

在你的任何活动 global.my

这是迄今为止我发现的最简单的方法!

于 2015-01-27T10:04:19.473 回答