2010-12-26 2 views
0

Я пытаюсь передать курсор методу. Но я получаю эту ошибку.Проблема с курсором

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

код.

public void loggedin(String title, String message, String positive, Cursor c) { 
    AlertDialog.Builder alertbox = new AlertDialog.Builder(
      HomeActivity.this); 
    alertbox.setTitle(title); 
    alertbox.setMessage(message); 
    alertbox.setPositiveButton(positive, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        String username = c.getString(0); 
        MessagingApplication.setUsername(""); 
        String currentUserName=MessagingApplication.getUsername(); 
        Toast.makeText(HomeActivity.this, currentUserName, 5); 

        alertbox("Error", currentUserName, 
          "Back", null); 

        Intent i = new Intent(HomeActivity.this, 
          MailActivity.class); 
        //startActivity(i); 
       } 
      }); 

    alertbox.show(); 
} 

ответ

2

Ваш OnClickListener - анонимный внутренний класс. Вы не можете использовать не конечные переменные с областью действия вне анонимного внутреннего класса.

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

Таким образом, вы должны объявить курсор как окончательный:

public void loggedin(String title, String message, String positive, final Cursor c) { 
Смежные вопросы