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、如何解决?
最佳答案
该引用位于匿名 Button.OnClickListener
子类中,因此 this
指的是监听器,而不是 Activity 。
简单地使用 pageNumber
而不是 this.pageNumber
应该可以,因为周围的范围仍然有效。或者,MainActivity.this.pageNumber
也可以工作(让编译器知道您希望引用外部类的实例)。
关于java - 为什么我不能在 JAVA 方法中使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076087/