共享偏好值未反映在应用程序中

Shared preference value not reflecting in app

我正在共享首选项中获取保存的值,但无法根据共享首选项中的值更新 TextView 或 ImageView。

这是我的共享首选项 class 的代码:

public class SharedPref {

public SharedPref(Context context){
}

public void saveString(Context context,String key, String value) {
    SharedPreferences sharedPref = context.getSharedPreferences(key,Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString(key, value);
    editor.apply();
}

public String getString(Context context,String key){
    SharedPreferences sharedPref = context.getSharedPreferences(key, Context.MODE_PRIVATE);
    String value = sharedPref.getString(key, "");

    return value;
}
}

这是保存和检索偏好值的代码:

@Override
public void onNumberOfOversClick(String _overs) {

    final SharedPref sharedPref = new SharedPref(MainActivity.this);

    String local = sharedPref.getString(MainActivity.this,"overs");

    // custom dialog
    final Dialog dialog = new Dialog(MainActivity.this);
    dialog.setContentView(R.layout.custom_overs_dialog);
    dialog.setTitle("Choose Overs...");

    TextView text_3 = (TextView) dialog.findViewById(R.id.text_3);
    TextView text_5 = (TextView) dialog.findViewById(R.id.text_5);

    final ImageView icon_tick_3 = (ImageView) dialog.findViewById(R.id.icon_tick_3);
    final ImageView icon_tick_5 = (ImageView) dialog.findViewById(R.id.icon_tick_5);

    if(local == "3" || local == "")
    {
        icon_tick_3.setImageResource(R.drawable.tick);
    }
    else if(local == "5")
    {
        icon_tick_5.setImageResource(R.drawable.tick);
    }
    dialog.show();

    text_3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            icon_tick_3.setVisibility(View.VISIBLE);
            icon_tick_3.setImageResource(R.drawable.tick);
            icon_tick_5.setVisibility(View.INVISIBLE);
            sharedPref.saveString(MainActivity.this, "overs", "3");
        }
    });

    text_5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            icon_tick_3.setVisibility(View.INVISIBLE);
            icon_tick_5.setVisibility(View.VISIBLE);
            icon_tick_5.setImageResource(R.drawable.tick);
            sharedPref.saveString(MainActivity.this, "overs", "5");
        }
    });
}

如您所见,我能够在本地字符串变量中检索值,但当我重新打开应用程序时,ImageView 未更新为 R.drawable.tick。

按照您现在的工作方式进行字符串比较。您需要将 equals 语句更改为 this

 if(local.equals("3") || local.equals(""))
{
    icon_tick_3.setImageResource(R.drawable.tick);
}

对于字符串比较,您必须使用 equals() 方法而不是 ==

因此将您的代码更新为:

if (local.equals("3") || TextUtils.isEmpty(local)) { ...