Java 保存ArrayList<;Uri>;共享数据引用

Java 保存ArrayList<;Uri>;共享数据引用,java,android,sharedpreferences,Java,Android,Sharedpreferences,我在一次活动中创建了几个ArrayList。当我离开活动并返回时,它们显示为null。根据一些研究,共享参考是克服这一问题的方法。我该怎么做;我必须将其保存为HashMap吗?SharedReferences是自己的方法还是我在另一种特定方法中进行的?您至少有三种选择: 按照您在问题中的建议使用SharedReferences对象 使用SQLite数据库 使用您自己格式的文件 有关这些选项的介绍,请阅读。您至少有三个选项: 按照您在问题中的建议使用SharedReferences对象 使用SQL

我在一次活动中创建了几个ArrayList。当我离开活动并返回时,它们显示为null。根据一些研究,共享参考是克服这一问题的方法。我该怎么做;我必须将其保存为HashMap吗?SharedReferences是自己的方法还是我在另一种特定方法中进行的?

您至少有三种选择:

  • 按照您在问题中的建议使用SharedReferences对象

  • 使用SQLite数据库

  • 使用您自己格式的文件


  • 有关这些选项的介绍,请阅读。

    您至少有三个选项:

  • 按照您在问题中的建议使用SharedReferences对象

  • 使用SQLite数据库

  • 使用您自己格式的文件


  • 有关这些选项的介绍,请阅读。

    此处,如何在共享首选项上书写:

        SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
        //if your codes in your activity class, you dont need getActivity so you should use this
        SharedPreferences.Editor editor = sp.edit();
        editor.putInt("your_string_key", yourValue);
        editor.commit();
    
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    //same here. If your codes in your activity don't write "getActivity." part
    int yourSavedValue = sp.getInt("your_string_key", defaultValue);
    //defaultValue mean if there is no value with that key, it will return defaultValue.
    
    在这里,如何读取共享首选项:

        SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
        //if your codes in your activity class, you dont need getActivity so you should use this
        SharedPreferences.Editor editor = sp.edit();
        editor.putInt("your_string_key", yourValue);
        editor.commit();
    
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    //same here. If your codes in your activity don't write "getActivity." part
    int yourSavedValue = sp.getInt("your_string_key", defaultValue);
    //defaultValue mean if there is no value with that key, it will return defaultValue.
    
    如果你想了解更多,你可以得到更多的信息

    回答您的最新问题:

    正如你所看到的,我的答案是defaultValue

    // Restore preferences
        SharedPreferences settings = getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
        Set<String> tempSet = settings.getStringSet(FIRST_LIST, "");
        Set<String> temp2Set = settings.getStringSet(SECOND_LIST, "");
        //if it is first time it will return null. So your app going crash. To avoid that make a default value. Like this.
        for (String str : tempSet)
            firstList.add(Uri.parse(str));
        for (String str : temp2Set)
            secondList.add(Uri.parse(str));
    
    //还原首选项
    SharedReferences设置=GetSharedReferences(PREF_文件,Context.MODE_PRIVATE);
    Set tempSet=settings.getStringSet(第一个列表“”);
    Set temp2Set=settings.getStringSet(第二个列表“”);
    //如果是第一次,它将返回null。所以你的应用程序会崩溃。为了避免这种情况,请创建一个默认值。这样地。
    for(字符串str:tempSet)
    add(Uri.parse(str));
    for(字符串str:temp2Set)
    add(Uri.parse(str));
    
    在这里,如何编写共享首选项:

        SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
        //if your codes in your activity class, you dont need getActivity so you should use this
        SharedPreferences.Editor editor = sp.edit();
        editor.putInt("your_string_key", yourValue);
        editor.commit();
    
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    //same here. If your codes in your activity don't write "getActivity." part
    int yourSavedValue = sp.getInt("your_string_key", defaultValue);
    //defaultValue mean if there is no value with that key, it will return defaultValue.
    
    在这里,如何读取共享首选项:

        SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
        //if your codes in your activity class, you dont need getActivity so you should use this
        SharedPreferences.Editor editor = sp.edit();
        editor.putInt("your_string_key", yourValue);
        editor.commit();
    
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    //same here. If your codes in your activity don't write "getActivity." part
    int yourSavedValue = sp.getInt("your_string_key", defaultValue);
    //defaultValue mean if there is no value with that key, it will return defaultValue.
    
    如果你想了解更多,你可以得到更多的信息

    回答您的最新问题:

    正如你所看到的,我的答案是defaultValue

    // Restore preferences
        SharedPreferences settings = getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
        Set<String> tempSet = settings.getStringSet(FIRST_LIST, "");
        Set<String> temp2Set = settings.getStringSet(SECOND_LIST, "");
        //if it is first time it will return null. So your app going crash. To avoid that make a default value. Like this.
        for (String str : tempSet)
            firstList.add(Uri.parse(str));
        for (String str : temp2Set)
            secondList.add(Uri.parse(str));
    
    //还原首选项
    SharedReferences设置=GetSharedReferences(PREF_文件,Context.MODE_PRIVATE);
    Set tempSet=settings.getStringSet(第一个列表“”);
    Set temp2Set=settings.getStringSet(第二个列表“”);
    //如果是第一次,它将返回null。所以你的应用程序会崩溃。为了避免这种情况,请创建一个默认值。这样地。
    for(字符串str:tempSet)
    add(Uri.parse(str));
    for(字符串str:temp2Set)
    add(Uri.parse(str));
    
    **您已将此阵列转换为gson

    **首先在参数public void saveArrayList(ArrayList列表,字符串键)中传递数组

    **现在创建SharedReferences的对象

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    SharedPreferences.Editor editor = prefs.edit();
    
    **现在转换为gson:

    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString(key, json);
    editor.apply();     // This line is IMPORTANT !!!
    

    **您已将此阵列转换为gson

    **首先在参数public void saveArrayList(ArrayList列表,字符串键)中传递数组

    **现在创建SharedReferences的对象

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    SharedPreferences.Editor editor = prefs.edit();
    
    **现在转换为gson:

    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString(key, json);
    editor.apply();     // This line is IMPORTANT !!!
    


    除此之外,我还想推荐一个非常好用的类,它使用SharedReferences,而且使用起来非常简单:,您可以执行类似于
    tinydb.putListObject(“list”,new ArrayList())的操作谢谢你给我介绍一下。我认为分享参考是我的出路。我仍然不知道如何将我的URI列表传递给它并将它们调用回来,这是我最初的问题suggests@ImagineThat阅读了
    SharedReferences
    的文档并尝试了一些方法后,请随时回答更多问题,越具体越好。@code学徒谢谢您的建议。我做了更多的研究,现在用我的代码指定了我的问题。请看一看。除此之外,我还想推荐一个非常好用的类,它使用SharedReferences,而且使用起来非常简单:,你可以做一些事情,比如
    tinydb.putListObject(“list”,new ArrayList())谢谢你给我介绍一下。我认为分享参考是我的出路。我仍然不知道如何将我的URI列表传递给它并将它们调用回来,这是我最初的问题suggests@ImagineThat阅读了
    SharedReferences
    的文档并尝试了一些方法后,请随时回答更多问题,越具体越好。@code学徒谢谢您的建议。我做了更多的研究,现在用我的代码指定了我的问题。请看一看,谢谢你。我已经更新了我的问题/代码。请看一看,我也更新了我的答案。如果它能解决你的问题,请接受这个答案。我能分辨出的唯一区别是
    而不是
    null
    。这是如何生成默认值的?第二个参数是平均默认值。如果函数没有提供任何资金,它将返回默认值。当它为null时,如果您第一次启动,您将得到null。如果您输入一个可以像“”或“empty”这样处理的值,则可以避免这种情况。你可以在这里检查:不,没有。我走了另一条路来解决我的问题。我已经更新了我的问题/代码。请看一看,我也更新了我的答案。如果它能解决你的问题,请接受这个答案。我能分辨出的唯一区别是
    而不是
    null
    。这是如何生成默认值的?第二个参数是平均默认值。如果函数没有提供任何资金,它将返回默认值。当它为null时,如果您第一次启动,您将得到null。如果您输入一个可以像“”或“empty”这样处理的值,则可以避免这种情况。你可以在这里检查:不,没有。我使用了另一种方法来解决我的问题。在尝试使用它之前,您应该检查
    tempSet
    是否为
    null
    。这同样适用于
    temp2Set
    。此外,两个列表似乎具有相同的内容。你这么做有什么原因吗?@Code学徒我就是这么做的。这段代码只是作为一个接近我的代码的示例,这可能就是为什么其中一些代码是多余的。我会把我的信寄出去