非 void 方法中的异步

Asynchronous within non-void method

我正在使用 Android loopj 库来实现异步 HTTP 客户端。我需要将 responseBody 设置为图像对象的 属性,如下所示,但由于异步,return 语句将改为 运行,并且图像对象始终为 null。

 public Image uploadImage(boolean async) {
        Image image = new Image();

        HttpClient.post(getFinalUrl(async), makeRequestParams(), new AsyncHttpResponseHandler
                () {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                UploadResponse[] uploadResponses = GsonParser.getArrayFromGson(responseBody,
                        UploadResponse[].class);
                UploadResponse response = uploadResponses[0];
                String st = response.getContent();
                image.setImageAddress(st);
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                Log.d("injaro", error.getMessage());
            }
        });


    }

异步方法不能这样工作。您应该向他们传递一个回调对象,一旦响应可用,该对象就会被调用。

所以如果你像这样定义一个回调接口:

public interface ImageCallback {
   void onImageReceived(Image image);
}

然后您可以像这样创建 2 个方法(一个同步方法和一个异步方法):

public Image uploadImage() {
...
}

public void uploadImageAsync(ImageCallback callback) {
...
}

在这一点上你只需要调用你需要的方法 - 即按钮点击侦听器会调用异步方法(因为你不想阻塞 UI 线程),但是你的后台服务可以安全调用同步服务。