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.如何解决?
答案 0 :(得分:5)
该引用位于您的匿名Button.OnClickListener
子类中,因此this
指的是侦听器,而不是活动。
仅使用pageNumber
而非this.pageNumber
应该有效,因为周围的范围仍然有效。或者,MainActivity.this.pageNumber
也可以工作(让编译器知道你希望引用外部类的实例)。