Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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
Java 什么是';标准&x27;在保存信息时切换类的方法?_Java_Android - Fatal编程技术网

Java 什么是';标准&x27;在保存信息时切换类的方法?

Java 什么是';标准&x27;在保存信息时切换类的方法?,java,android,Java,Android,切换到第二节课后,我在第一节课上保存信息时遇到了一个问题,基本上是这样的 [int] a = 25; Intent asd = new Intent(getApplicationContext(), secondActivity.class); startActivity(asd); 但当我在第二个活动中开始打算返回第一节课时,我的问题就发生了,就像这样: Intent jkl = new Intent(getApplicationContext(), firstActivity.class)

切换到第二节课后,我在第一节课上保存信息时遇到了一个问题,基本上是这样的

[int] a = 25;
Intent asd = new Intent(getApplicationContext(), secondActivity.class);
startActivity(asd);
但当我在第二个活动中开始打算返回第一节课时,我的问题就发生了,就像这样:

Intent jkl = new Intent(getApplicationContext(), firstActivity.class);
startActivity(jkl);
因为当我返回到那个类时,
inta
返回到它的初始值,而不是我在切换类之前修改的值。 我在类范围中将'a'的值设置为20,然后在
onClickListener
onResume()范围中将其更改为25


我是不是换错了班?为什么价值没有节约?对我来说,它不应该将值重置为它的初始值是有道理的,因为它的初始值不是在on
Start()
/
onCreate()
方法中设置的。

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

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

  • 您可以将值存储在sqlite中

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

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

SharedReference存储将键值对保存在文件中,您可以为这些文件提供
模式
,如果指定
专用
模式,则该文件将仅可供您的应用程序访问。如果要使该文件可供其他应用程序访问,则需要指定为
public

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

我将在这里解释如何在特定情况下使用共享首选项

SharedReference

首先,您可以使用如下上下文对象创建SharedReferenceFile

SharedPreferences mySharedPref =  
                    context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
在这里创建时,您可以为文件指定
访问模式

接下来,为了将值存储在此文件中,您可以通过调用SharedReference对象上的
edit()
函数,获得文件的
SharedReferences.Editor
对象

SharedPreferences.Editor editor = mySharedPref.edit();
SharedPreferences mySharedPref = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
mySharedPref.getInt("a",0);
现在,您可以像这样将
inta=25
键值对添加到编辑器中

editor.putInt("a", a);
然后需要调用
apply()
函数才能写入文件

editor.apply()

然后,检索所需的全部操作就是调用SharedReference对象上的getInt()函数

SharedPreferences.Editor editor = mySharedPref.edit();
SharedPreferences mySharedPref = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
mySharedPref.getInt("a",0);
getInt()
函数中的第二个参数是默认值,以防文件中的键“a”没有值


因此,您可以将a的值存储在活动的
onStop()
中的sharedpreffile中,并在活动的
onStart()
中再次检索它,然后按代码跳转到firstActivity

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

这不是返回firstActivity,这些代码创建了一个新的firstActivity!因此,参数将是它的初始值。您可以调用
finish()
关闭第二个活动。

请先检查类和活动的生命周期。。。变量初始化,范围!!!!!如果要保存以前活动使用的数据,您将自动获得答案Sharedprefrence@koutuk如果数据的值没有在onStart或onCreate中重置,为什么我需要保存数据?可能是重复的。如果您没有切换回A类,您正在启动一个新的A类。如果要返回到上一个活动,请调用
finish()
。切勿使用
startActivity()
返回到上一个活动,这样,您的第二个活动将不会被回收,您的活动堆栈将类似于此firstActivity->seconedActivity->firstActivity这就是它所做的!谢谢你的帮助!那么澄清一下,你的意思是通过类“jkl”中的意图启动“asd”,我打开的是“asd”的第二个实例,而不是我试图访问的原始实例吗?@kaio37k是的,你也可以谷歌启动模式,如果你的活动的启动模式是singleTop、singleInstance或singleTask,它不会创建第二个实例,但是如果您的启动模式是标准模式(默认模式),它将创建第二个启动模式。