代码之家  ›  专栏  ›  技术社区  ›  mystic cola

android在sharedpreference中保存多个值

  •  0
  • mystic cola  · 技术社区  · 7 年前

    我有一个相当简单的切换按钮“喜欢”系统。用户id和照片id被发送到数据库并存储…然后,在应用程序中,我使用共享首选项来记住用户是否喜欢照片。

    imageToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) {
                        addLike();
                        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
                        SharedPreferences.Editor editor = preferences.edit();
                        editor.putBoolean("liked", imageToggle.isChecked()); // value to store
                        editor.putString("pic_id", foto_id);
                        editor.commit();
                    } else {
                        unLike();
                        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
                        SharedPreferences.Editor editor = preferences.edit();
                        editor.putBoolean("liked", false); // value to store
                        editor.commit();
    
                    }
                }
            });
    

    然后…无论何时创建视图…将检查首选项以查看照片是否受欢迎。

    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
            boolean liked = preferences.getBoolean("liked", false);
            String pic = preferences.getString("pic_id", "0");
            final ToggleButton imageToggle = (ToggleButton) findViewById(R.id.like);
            if (pic.equals(foto_id)) {
                imageToggle.setChecked(liked);
            }
    

    问题…你可能猜到了…一次只能拍一张照片。如果我单击另一张照片并喜欢它,则该照片的ID将变为picu id,原始照片将变为未选中。

    我甚至不确定sharedpreferences是实现我想做的事情的正确方法。(存储和检索喜欢的照片的多个值)。我研究了从保存集到将所有内容转换为json的所有内容……我考虑过每次查询数据库,看看用户是否喜欢某张照片…

    ……但我已经接近了我想要达到的目标,我只知道一定有一些简单的方法可以做到,只是我还没有意识到。我只想分享我的参考资料,就是记住我是否喜欢每一张照片。也许只是每张照片的一个新的共享参考?

    考虑到目前为止我所拥有的一切,对于我正在尝试做的事情,最简单的解决方案是什么?

    2 回复  |  直到 7 年前
        1
  •  0
  •   mystic cola    7 年前

    是的,共享引用应该有效。您可以使用fotoid作为键,如果您有fotoid,您可以在共享首选项中设置和查找fotoid来管理布尔值“liked”。

    imageToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    addLike();
                    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
                    SharedPreferences.Editor editor = preferences.edit();
                    editor.putBoolean(foto_id, imageToggle.isChecked()); // changed from "liked". Changed "foto_id" to foto_id -mysticola
                    // remove this line editor.putString("pic_id", foto_id);
                    editor.commit();
                } else {
                    unLike();
                    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
                    SharedPreferences.Editor editor = preferences.edit();
                    editor.putBoolean(foto_id, false); // changed from liked
                    editor.commit();
    
                }
            }
        });
    

       SharedPreferences preferences = getPreferences(MODE_PRIVATE);
            boolean liked = preferences.getBoolean(foto_id, false); // change from "liked"
            // remove String pic = preferences.getString("pic_id", "0");
            final ToggleButton imageToggle = (ToggleButton) findViewById(R.id.like);
            if (liked) { // changed this part
                imageToggle.setChecked(liked);
            } 
    
        2
  •  0
  •   psydj1    7 年前

    因为您不知道将选择多少张照片,而且照片可以动态更改,所以可能需要将类似照片ID的列表保存到共享首选项中。通常共享的首选项只允许您保存数据集而不是列表,所以这个问题说明了如何做到这一点。

    Save ArrayList to SharedPreferences