Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中的活动之间存储数据?类似购物车_Android - Fatal编程技术网

如何在android中的活动之间存储数据?类似购物车

如何在android中的活动之间存储数据?类似购物车,android,Android,我想在一些活动之间提供一些数据,就像网站上的购物车一样 这些数据可能是字符串的集合,可能是列表、地图或类似的东西。每个项目都应该关联一个id、数量、类型和一个文本注释(关于最后一个项目还不确定) 关键是,在会话结束后,它不需要是持久的,在整个会话中,这些数据将被删除并完全重新创建多次 问题是: 使用SharedReferences?数据库是最佳选择吗 谢谢 更好的选择是通过factory对象定位的一些单例java集合(映射或列表)。只需将您的购物车存储在那里,根本不用担心数据库或首选项 如果您决

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

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

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

问题是: 使用SharedReferences?数据库是最佳选择吗


谢谢

更好的选择是通过factory对象定位的一些单例java集合(映射或列表)。只需将您的购物车存储在那里,根本不用担心数据库或首选项

如果您决定使用首选项,我可以重新编译我的小型数据绑定库:

或意图


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

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

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

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

class MySessionVars
 {
      public static int MyVar1;
 }
在第一个活动中

{
   MySessionVars.NyVar1=10;
}
以及任何其他活动

{
    Var = MySessionVars.NyVar1;
}

这是最简单的方法,将保留VAR直到关闭应用程序

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

{
   public static arrayList<String> my;
}
{
公共静态数组列表my;
}
在你的任何活动中 全球,我的

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

您可以使用(谷歌)发送和接收任何数据,甚至是类对象


发送:(第一个活动)


接收:(第二个活动)


通常,除了将我希望确保保留在数据库或共享首选项中的任何数据存储在数据库或共享首选项中之外,我还使用此解决方案。是否要创建一个包含自定义对象集合的类?可以这样做,也可以将集合存储在应用程序对象()中应用程序单例很好,但您必须管理它,因为一旦活动完成,它就不会消失。配置活动强制暂停保存
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);
    }
    //...
}