为什么我不能在JAVA方法中使用变量?

时间:2014-01-12 14:56:56

标签: java android variables scope

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)。

但我可以在populateList()函数中访问pageNumber,为什么我无法在loadMoreButtonOnClick()中访问它,这是否意味着我已经在不同的上下文中?

系统是:JDK 6,Android Studio 0.4.2,我的项目是从API 9到API 18

我是Java的新手。所以我的问题是:
1.为什么? 2.如何解决?

1 个答案:

答案 0 :(得分:5)

该引用位于您的匿名Button.OnClickListener子类中,因此this指的是侦听器,而不是活动。

仅使用pageNumber而非this.pageNumber应该有效,因为周围的范围仍然有效。或者,MainActivity.this.pageNumber也可以工作(让编译器知道你希望引用外部类的实例)。