Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内部类中的布尔值“isChecked”(Android)_Android - Fatal编程技术网

内部类中的布尔值“isChecked”(Android)

内部类中的布尔值“isChecked”(Android),android,Android,我创建了一个开关来打开/关闭警报。但是,当我想在关闭开关时保存开关的值时,我得到一个错误:变量'isChecked'是从内部类中访问的,需要声明为final 这是我的代码: final Switch mySwitch = (Switch) findViewById(R.id.theswitch); //attach a listener to check for changes in state mySwitch.setOnCheckedChangeListe

我创建了一个开关来打开/关闭警报。但是,当我想在关闭开关时保存开关的值时,我得到一个错误:变量'isChecked'是从内部类中访问的,需要声明为final

这是我的代码:

 final Switch mySwitch = (Switch) findViewById(R.id.theswitch);

        //attach a listener to check for changes in state
        mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {

                final SharedPreferences myPrefs = getSharedPreferences("myPrefs",0);
                final SharedPreferences.Editor editor = myPrefs.edit();
                editor.putBoolean("switch", isChecked);
                editor.commit();

                if(isChecked){
                    //switch has been switched ON

                    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+1:00"));
                    Date currentLocalTime = cal.getTime();
                    DateFormat date = new SimpleDateFormat("HH:mm");
// you can get seconds by adding  "...:ss" to it
                    date.setTimeZone(TimeZone.getTimeZone("GMT+1:00"));
                    String localTime = date.format(currentLocalTime);

                    Log.w(localTime, "1");

              if (localTime.equals("08:50") || localTime.equals("08:51") || localTime.equals("08:52")|| localTime.equals("08:53")|| localTime.equals("08:54") || localTime.equals("08:55") || localTime.equals("08:56")
                      || localTime.equals("08:57")|| localTime.equals("08:58")|| localTime.equals("08:59")|| localTime.equals("09:00")|| localTime.equals("09:01")|| localTime.equals("09:02")|| localTime.equals("09:03")
                      || localTime.equals("09:04")|| localTime.equals("09:05")|| localTime.equals("09:06")|| localTime.equals("09:07")|| localTime.equals("09:08")|| localTime.equals("09:09")|| localTime.equals("09:10")
                      || localTime.equals("09:11")|| localTime.equals("09:12")|| localTime.equals("09:13")|| localTime.equals("09:14")|| localTime.equals("09:15")|| localTime.equals("09:16")|| localTime.equals("09:17")
                      || localTime.equals("09:18")|| localTime.equals("09:19")|| localTime.equals("09:20")|| localTime.equals("09:21")|| localTime.equals("09:22")|| localTime.equals("09:23")|| localTime.equals("09:24")
                      || localTime.equals("09:25")|| localTime.equals("09:26")|| localTime.equals("09:27")|| localTime.equals("09:28")|| localTime.equals("09:29")|| localTime.equals("09:30")|| localTime.equals("09:31")
                      || localTime.equals("09:32")|| localTime.equals("09:33")|| localTime.equals("09:34")|| localTime.equals("09:35")|| localTime.equals("09:36")|| localTime.equals("09:37")|| localTime.equals("09:38")
                      || localTime.equals("09:39")|| localTime.equals("09:40")|| localTime.equals("09:41")|| localTime.equals("09:42")|| localTime.equals("09:43")|| localTime.equals("09:44")|| localTime.equals("09:45")
                      || localTime.equals("09:46")|| localTime.equals("09:47")|| localTime.equals("09:48")|| localTime.equals("09:49")|| localTime.equals("09:50")|| localTime.equals("09:51")|| localTime.equals("09:52")
                      || localTime.equals("09:53")|| localTime.equals("09:54")|| localTime.equals("09:55")|| localTime.equals("09:56")|| localTime.equals("09:57")|| localTime.equals("09:58")|| localTime.equals("09:59")
                      || localTime.equals("10:00")|| localTime.equals("10:01")|| localTime.equals("10:02")|| localTime.equals("10:03")|| localTime.equals("10:04")|| localTime.equals("10:05")|| localTime.equals("10:06")
                      || localTime.equals("10:07")|| localTime.equals("10:08")|| localTime.equals("10:09")|| localTime.equals("10:10")|| localTime.equals("12:35")|| localTime.equals("12:57")|| localTime.equals("09:00")){

                  Log.w("It is between", "those times");

                  boolean beenfired2 = myPrefs.getBoolean("beenfired", false);

                   if (beenfired2 != true){

                       firenotifications();
                       beenfired = true;
                       editor.putBoolean("beenfired", beenfired);
                       editor.commit();
                   }
                    else {
                       Log.w("else", "else");
                   }
                 }
                    else {
                  AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Inlopen.this);

                  // set title
                  alertDialogBuilder.setTitle("Alarm kan niet worden ingeschakeld");

                  // set dialog message
                  alertDialogBuilder
                          .setMessage("U kunt het alarm alleen inschakelen tussen 9:00 en 10:00 's ochtends.")
                          .setCancelable(false)

                          .setNegativeButton("Oke", new DialogInterface.OnClickListener() {
                              public void onClick(DialogInterface dialog, int id) {
                                  // if this button is clicked, just close
                                  // the dialog box and do nothing

                                  mySwitch.setChecked(false);
                                  editor.putBoolean("switch", isChecked);
                                  editor.commit();
                                  dialog.cancel();
                              }
                          });

                  // create alert dialog
                  AlertDialog alertDialog = alertDialogBuilder.create();

                  // show it
                  alertDialog.show();
              }
                }
                else{
                    //switch has been switched OFF
                }
            }
        });
    }
问题出在AlertDialog的代码中


怎么办

把final这个词放在前面

public void onCheckedChanged(CompoundButton buttonView,
                                     final boolean isChecked)
您的DialogInterface.OnClickListener是一个匿名类。函数中声明它的所有最终变量都作为匿名类的字段复制。最后一个关键字使值保持不变。需要一个常量值以避免歧义。否则,如果复制字段的值可能会更改,那么anonmyous类将保留什么值就不完全清楚了——这取决于该类在函数中的声明位置、执行时间或其他因素吗?它必须是常数,这样就不重要了