在保存信息的同时切换类的“标准”方法是什么?

时间:2015-12-23 04:46:53

标签: java android

在切换到我的第二堂课后,我在第一堂课时保留信息的问题,基本上就是这样。

[int] a = 25;
Intent asd = new Intent(getApplicationContext(), secondActivity.class);
startActivity(asd);

但是当我在第二个活动中启动一个Intent来返回到第一个类时,我的问题就出现了,如下所示:

Intent jkl = new Intent(getApplicationContext(), firstActivity.class);
startActivity(jkl);

因为当我返回那个类时,int a返回到它的初始值,而不是我在切换类之前修改的值。 我在类范围内将'a'的值设置为20,然后在onClickListener范围内的onResume()中将其更改为25。

我是否以错误的方式切换课程?为什么价值不能保存?我不应该将值重置为初始值,因为它的初始值未在on Start() / onCreate()方法中设置。

2 个答案:

答案 0 :(得分:0)

在活动之间切换时有很多存储数据的选项,我会在这里列出其中几个,

  • 您可以将值存储在共享首选项中

  • 您可以将值存储在sqlite中。

当您要存储的值是键值对而不是复杂对象时,将使用第一个选项。有时,人们通过将对象转换为json字符串来存储复杂对象。

但是sqlite是存储复杂对象的首选方式,特别是使用像greenDao,ORMlite等ORM框架,因为您可以使用这些库直接在sqlite DB中存储和检索java对象。

Sharedpreference存储将密钥值对保存在文件中,您可以为这些文件提供MODE,如果指定private模式,则该文件只能由您的应用程序访问。如果要使文件可供其他应用程序访问,则需要指定为public

另一方面,Sqlite是专为移动设备设计的基于SQL的精简版数据库存储。它们应该更快,并且是服务器中使用的更轻的SQL版本。

我将在此解释如何针对您的特定情况使用共享偏好

<强> SharedPreference

首先,您可以使用像这样的上下文对象

创建sharedPreference文件
SharedPreferences mySharedPref =  
                    context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);

在创建时,您可以为文件指定ACCESS MODE

接下来,为了在此文件中存储值,您可以通过调用sharedPreference对象上的SharedPrefences.Editor函数来获取该文件的edit()对象。

SharedPreferences.Editor editor = mySharedPref.edit();

现在您可以将int a = 25键值对添加到编辑器中。

editor.putInt("a", a);

然后你需要调用apply()函数才能写入文件。

editor.apply();

然后检索你需要做的就是在sharedPreference对象上调用getInt()函数。

SharedPreferences mySharedPref = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
mySharedPref.getInt("a",0);

getInt()函数中的第二个参数是一个默认值,以防该键没有值&#34; a&#34;在文件中。

您可以做的是将a的值存储在您的活动的onStop()中的共享预览中,并在您的活动的onStart()中再次检索

答案 1 :(得分:0)

当您按代码跳转到firstActivity时

Intent jkl = new Intent(getApplicationContext(), firstActivity.class);
startActivity(jkl);

它不会回到firstActivity,这些代码会创建一个新的firstActivity!所以参数将是它的初始值。你可以调用finish()来关闭你的secondActivity。