有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

但是,当我在第二个活动中开始意图返回第一节课时,我的问题就发生了,比如:

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

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

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


共 (2) 个答案

  1. # 1 楼答案

    当你通过代码跳转到firstActivity时

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

    这不是回到firstActivity,这些代码创建了一个新的firstActivity!所以参数就是它的初始值。你可以打电话finish()来结束你的第二个活动

  2. # 2 楼答案

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

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

    • 可以将值存储在sqlite中

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

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

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

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

    我将在这里解释如何在特定情况下使用共享偏好

    SharedReference

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

    SharedPreferences mySharedPref =  
                        context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
    

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

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

    SharedPreferences.Editor editor = mySharedPref.edit();
    

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

    editor.putInt("a", a);
    

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

    编辑。应用()

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

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

    getInt()函数中的第二个参数是默认值,以防文件中的键“a”没有值

    因此,您可以将a的值存储在活动的onStop()中的sharedpreffile中,然后在活动的onStart()中再次检索它