簡體   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