2014-01-12 2 views
0
public class MainActivity extends ActionBarActivity { 

    private Context cx; 
    private int pageNumber=0; 


    private void populateList() { 
     AsyncHttpClient client = new AsyncHttpClient(); 
     RequestParams paras = new RequestParams(); 
     paras.put("page",this.pageNumber+1); 
     ............ 
    } 

    private Button.OnClickListener loadMoreButtonOnClick = new Button.OnClickListener(){ 
     public void onClick(View v){ 
      AsyncHttpClient client = new AsyncHttpClient(); 
      RequestParams paras = new RequestParams(); 
      paras.put("page",this.pageNumber+1); //can't resolve symbol "pageNumnber" 
      client.get("http://APIAddressHere",paras,new AsyncHttpResponseHandler(){ 
       @Override 
       public void onSuccess(int statusCode, org.apache.http.Header[] headers, byte[] responseBody){ 
        //it's ok; 
       } 

       @Override 
       public void onFailure(int statusCode, org.apache.http.Header[] headers, byte[] responseBody, Throwable error) 
       { 
        // Response failed :(
       } 

      }); 
     } 
    }; 
} 

내가 코멘트 한 두 번째 함수 (loadMoreButtonOnClick)에서 IDE는 내가 만든 변수 (private int pageNumber)에 액세스 할 수없는 것 같은 오류가 발생합니다.왜 Java 메서드에서 변수를 사용할 수 없습니까?

populateList() 함수에서 pageNumber에 액세스 할 수 있는데, 왜 내가 loadMoreButtonOnClick()에서 액세스 할 수 없는지, 이는 이미 다른 컨텍스트에 있음을 의미합니까?

시스템은 다음과 같습니다 JDK 6, 안드로이드 스튜디오 0.4.2, 내 프로젝트는 API 18

나는 자바에 새로 온 사람에 API 9 일부터입니다. 그래서 내 질문은 :
1. 왜?
2. 해결 방법은 무엇입니까?

답변

5

해당 참조는 익명의 Button.OnClickListener 하위 클래스에 있으므로 this은 활동이 아닌 수신기를 나타냅니다.

this.pageNumber 대신 간단히 pageNumber을 사용하면 주변 범위가 유효하므로 작동해야합니다. 또는 MainActivity.this.pageNumber도 작동합니다 (컴파일러에서 외부 클래스의 인스턴스를 참조하려고 함을 알립니다).

+0

빠른 답변을 제공해 주셔서 감사합니다. 이제 작동합니다. 나는 "MainActivity.this.pageNumber"방식을 선호한다. –

+0

또한 다음 주소로 문의하십시오. http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html#shadowing –

관련 문제