我正在使用AsyncHttpResponseHandler从RESTful服务收集数据。我遇到的问题是我无法在onSuccess回调中访问我需要的变量。
我的代码如下。
for (int i=0; i<=count; i++) {
requestItemsByCategory(context, categories.get(i), 10, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
loadItemsFromJsonString(context, response, categories.get(i));
}
});
}
onSuccess中的上下文和类别显然不可用。我可以创建这些全局变量,但问题是这会使calle din成为一个循环,所以onSuccess将被调用几次而不保证哪一个首先返回。
我对Java很新。在Objetive-C中,您可以访问代码块内匿名函数之外的变量。如果无法完成,我将jsut必须自定义我的查询以立即撤回所有数据,然后在客户端解析它,这是一个更好的解决方案,但我想知道是否访问可以使用回调中的项目。
答案 0 :(得分:2)
实际上,您无法在此范围内访问这些变量,但您可以尝试通过此代码的类实例访问它们:
class YourCoolActivity extends Activity {
// + getter/setter
private int index;
// The rest of the class
private void yourCoolMethod(){
for (int i=0; i<=count; i++) {
this.setIndex(categories.get(i));
requestItemsByCategory(this.getContext(), categories.get(i), 10, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
loadItemsFromJsonString(YourCoolActivity.this.getContext(), response, YourCoolActivity.this.getIndex());
}
});
}
}
}
答案 1 :(得分:0)
您可以创建一个简单的新类,而不是使用匿名内部类,该类将构造函数的参数作为您想要在onSuccess方法中访问的值。
class MyResponseHandler extends AsyncHttpResponseHandler() {
private Context context;
private Category category;
public MyResponseHandler( Context context, Category category ) {
this.context = context;
this.category = category;
}
@Override
public void onSuccess( String response ) {
loadItemsFromJsonString(context, response, category);
}
}
然后您的代码变为
for (int i=0; i<=count; i++) {
requestItemsByCategory(context, categories.get(i), 10, new MyResponseHandler(context, categories.get(i));
}