2010-12-26 10 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は匿名の内部クラスです。匿名の内部クラス以外のスコープで非最終変数を使用することはできません。

これは、匿名の内部クラスがすべてのローカル変数のコピーを取得し、内部クラスが使用されたときに使用できるようになるためです。変数にfinalとマークされていない場合、値が同じであるという保証はありません。

ですから、最後のようにカーソルを宣言する必要があります:

public void loggedin(String title, String message, String positive, final Cursor c) { 
関連する問題