Android-обработчик делает переменную в качестве финала

1

Почему я получаю это сообщение, когда пишу обработчик, и компилятор настаивает на том, чтобы сделать эту переменную окончательной?

Cannot refer to a non-final variable inside an inner class defined in a different 
method

Мой вопрос в том, как я могу определить переменную non-final в моем коде: (как я могу изменить книгу, файл, примечание и время до финала), они являются глобальными переменными, и я передаю их trakingNotes

public void trakingNotes (final double book, final long file, final String note, final double Time) {
    MaxInfo = 100;
    Timer updateTimer = new Timer("NoteSaveings");
    updateTimer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
       updateGUI( book, file, note, Time);
      }
    }, 0, 1000);
    }


NotesDB dbnotes = new NotesDB(this);

private void updateGUI( final double book, final long file, final String note, final double Time) {
     long idy;
      // Update the GUI
     noteHandler.post(new Runnable() {
    public void run() {
     long idy;
     dbnotes.open();     
     idy= dbnotes.insertnoteTitle (book, file, note, Time);
     if ((book) == samebook )//samebook is a global varible
     {ReadDBnotes();}
     dbnote.close();
  });}
Теги:
handler
variables
final

1 ответ

1

Вы должны объявить книгу, файл, примечание и время окончательными, потому что вы используете их внутри анонимных внутренних классов.

Я думаю, вы не хотите, чтобы они были окончательными, потому что вы хотите изменить их ценности. Это может быть достигнуто с использованием дополнительных конечных переменных. Если вы хотите изменить стоимость книги, вы можете написать это:

public void trakingNotes (double book, final long file, final String note, final double Time) {
    MaxInfo = 100;
    Timer updateTimer = new Timer("NoteSaveings");
    final double changedBook = book + 1.0;

    updateTimer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
       updateGUI( changedBook, file, note, Time);
      }
    }, 0, 1000);
}
  • 0
    хорошо, но я передаю переменную книгу из другого метода ..... ??

Ещё вопросы

Сообщество Overcoder
Наверх
Меню