Android-обработчик делает переменную в качестве финала - PullRequest
1 голос
/ 02 июля 2011

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

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

Мой вопрос: как я могу определить не финальную переменную в моемкод: (как я могу изменить книгу, файл, заметку и время на нефинал) они являются глобальными переменными, и я передаю их в 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();
  });}

1 Ответ

1 голос
/ 02 июля 2011

Вы должны объявить book , file , note и Time как окончательные, поскольку вы используете их внутри анонимных внутренних классов.

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

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);
}
...