问题与共享偏好布尔(Issue with boolean on shared preferences

2019-10-17 03:11发布

目前我正在试图启动基于布尔或真或假的时候,手机开机的服务。 问题是如果我使用getBoolean

 boolean isPhysicalSirenFlagged = sp.getBoolean("isPhysicalSirenFlagged", true);
 boolean isSMSSirenFlagged = sp.getBoolean("isSMSSirenFlagged", true);

他们都将设置为true,每当电话启动导致我的我的两个isPhysicalSirenFlagged&isSMSSirenFlagged是真实的时候。 是否有可能检查什么是值的电流布尔?

码:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
     String value = sp.getString("serial", "");
     boolean isPhysicalSirenFlagged = sp.getBoolean("isPhysicalSirenFlagged", true);
     boolean isSMSSirenFlagged = sp.getBoolean("isSMSSirenFlagged", true);

     if (isPhysicalSirenFlagged) {
         //true
         Intent physicaldialog = new Intent(context, PhysicalTheftDialog.class);
         physicaldialog.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(physicaldialog);
         context.startService(new Intent(context, PhysicalTheftService.class));
     }
     else {
         //false
     }

     if (isSMSSirenFlagged) {
         //true
         Intent smsdialog = new Intent(context, SMSNotificationPasswordDialog.class);
         smsdialog.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         context.startActivity(smsdialog);
         context.startService(new Intent(context, RemoteSirenService.class));
     }
     else {
         //false
     }

Answer 1:

把它设置为false,而不是,明明什么都你正在做不commiting更改了SharedPrefereces指示标志。 利用虚假的默认情况下,将防止意外真正分配到标志。 如实,你应该用INT标志(或优选枚举)来表示这一点。 它是确定所述装置处于例如状态的更安全的方法。:

int NO_STATE    = 0
int IS_THEFTED  = 1
int IS_WAILING  = 2

or

enum State {
    NONE, THEFTED, WAILING;
}


文章来源: Issue with boolean on shared preferences