繁体   English   中英

在 Android 上使用 Sharedpreferences 的存储问题

[英]Storage problem using Sharedpreferences on Android

我使用 recyclerView 创建了一个列表。 每个列表项都有一个按钮和一个进度条,按下按钮会增加进度条的值。 此外,使用 SharedPreferences,即使在关闭后也会保留记录。 但是,所有进度条都存储相同的值。 我想为每个按钮以不同的方式保存进度条的值。

这是适配器代码

public class DayListAdapter extends RecyclerView.Adapter<DayListAdapter.MainViewHolder> {
    private ArrayList<AddDayInfo> mDataset;
    private Activity activity;
    static int nowValue ;

class MainViewHolder extends RecyclerView.ViewHolder {
        CardView cardView;
        ProgressBar daybar;
        Button dayeat;

        MainViewHolder(CardView v) {
            super(v);
            cardView = v;

            this.daybar = (ProgressBar) v.findViewById(R.id.daybar);
            this.dayeat = (Button) v.findViewById(R.id.dayeat);

            dayeat.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    saveData();
                    getData();
                    Log.d("addvalue ", String.valueOf(nowValue));

                    //nowValue = bar.getProgress();
                    int maxValue = daybar.getMax(); 

                    if (maxValue == nowValue) {
                        nowValue = 0;
                    } else {
                        daybar.setVisibility(View.VISIBLE);
                        nowValue += 1;

                    }

                    if (nowValue == 0) {
                        daybar.setVisibility(View.GONE);

                    } else
                        daybar.setProgress(nowValue);
                }
            });

        }
    }

    /*Save Data*/
    public void saveData(){
        SharedPreferences sf =this.activity.getSharedPreferences("test", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sf.edit();
        editor.putInt("KEY2", nowValue);
        Log.e("setv", String.valueOf(nowValue));
        editor.apply();
    }
    /*Get Data*/
    public void getData(){
        SharedPreferences sf =this.activity.getSharedPreferences("test", Context.MODE_PRIVATE);
        int value = sf.getInt("KEY2", nowValue);
        Log.e("getv", String.valueOf(value));
        nowValue=value;
    }

这里的问题是您将值保存在 sharedPreferences 中的相同键“KEY2”中。 因此,如果您需要存储显示的每个项目的值,请使用不同的键。 不推荐这种方式。 我认为您应该使用本地数据库来存储您的值,使用可以使用 Room: https://developer.android.com/training/data-storage/room

我建议使用 Room 持久库将值存储在 Sqlite db 中。

参考这里:- https://codelabs.developers.google.com/codelabs/android-room-with-a-view/index.html?index=..%2F..index#0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM