将变量传递到Android的AsynchttPresponseHandler回调中



我正在使用asynchttpresponsehandler从静止服务中收集数据。我遇到的问题是,我无法访问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));
            }
        });
    }

显然,上下文和类别不可用。我可以进行这些全球变量,但是问题是,这是使Calle Din成为一个循环,因此,校友将被称为几次,而无法首先返回。

我是Java的新手。在Objetive-C中,您可以访问代码块内匿名函数之外的变量。如果无法完成,我将必须自定义我的查询才能立即撤回所有数据,然后将其解析在客户端,这是一个更好的解决方案,但是我想知道是否访问可以回调的项目。

的确,您无法在此范围中访问这些变量,但是您可以尝试通过类实例访问这些变量,该代码为:

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());
          }
      });
    }
  }
}

而不是使用匿名内部类,您可以创建一个简单的新类,该类作为构造函数以构造函数为参数,您要在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));
}

相关内容

  • 没有找到相关文章

最新更新