我想在某些活动之间提供一些数据,就像网站上的购物车一样。
这些数据可能是字符串的集合,可能是列表,地图或类似的东西。每个项目都应该关联一个id,数量,类型和文本注释(关于最后一个还不确定)
关键是会话结束后不需要持久化,这个数据将在整个会话中被删除并重新创建多次。
问题是: 是使用SharedPreferences的最佳选择吗?数据库?
谢谢!
答案 0 :(得分:3)
更好的选择是通过工厂对象定位的一些单件java集合(地图或列表)。只需将您的购物车存放在那里,而不必担心数据库或偏好
如果你决定使用偏好,我可以推荐我的小数据库:
答案 1 :(得分:1)
最简单的方法是使用一个声明了公共静态变量的类,并且jus从任何活动设置它们,并通过调用静态引用来检索保存在任何其他活动中的值,即MyContantsClass.StaticVar1 like
class MySessionVars
{
public static int MyVar1;
}
在第一个活动中
{
MySessionVars.NyVar1=10;
}
以及任何其他活动
{
Var = MySessionVars.NyVar1;
}
这是最简单的方法,将保留变量,直到应用程序关闭
答案 2 :(得分: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);
接收:(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);
}
//...
}
答案 3 :(得分:0)
Use Bundle或意图。
我不建议为此目的使用数据库。需要正确打开和关闭数据库。在围绕活动传递数据的地方,可能会弄乱哪些活动应该是关闭数据库的最后一个,并且可能导致泄漏。如果您只是将这些数据从一个Activity传递到另一个Activity,请创建一个Bundle,在开始下一个活动时将其附加到Intent。
答案 4 :(得分:0)
SharedPreferences非常适合存储简单的键/值对和少量数据,但是,我想你的购物车对象可能比这更复杂一些。出于这个原因,我可能会使用SQLite数据库。如果你没有复杂的数据,你只想存储一些简单的东西,那么共享偏好应该这样做。
答案 5 :(得分:0)
SharedPreferences是键值对,而Android中的数据库是SQLite,它们在会话后都会持续存在。您可以在SQLite数据库上执行任意数量的操作,并在下一个会话期间使用相同的文件。 如果您需要对特定用例进行更多说明,可以对我的答案提出意见。
答案 6 :(得分:0)
人们可能会谈论制作全局数据或在共享偏好中存储值,但根据我的经验,最简单的方法是创建一个单独的类,将变量或arraylists声明为public static,然后通过引用在整个项目中使用它们classname.variable名称。
class global
{
public static arrayList<String> my;
}
在您的任何活动中 global.my
这是我到目前为止找到的最简单的方法!