Android:像在iOS中一样以增量方式获取HTTP响应

Android:像在iOS中一样以增量方式获取HTTP响应,android,ios,json,streaming,httprequest,Android,Ios,Json,Streaming,Httprequest,我对Android比较陌生(我是一名iOS开发人员),我想用NsurlConnectionLegate的方法调用一个Web服务,就像我在iOS中使用的一样 didReceiveData:(NSData *)data 我需要以增量方式获取数据,因为我正在构建一个流式API,该API将获取大量JSON数据作为响应,并需要检查数据是否完整 如果有人能帮助我,那就太好了,我已经搜索了一段时间,到目前为止还没有找到令人满意的解决方案。如果你尝试在Android中调用web服务,你应该使用异步任务,其中请

我对Android比较陌生(我是一名iOS开发人员),我想用NsurlConnectionLegate的方法调用一个Web服务,就像我在iOS中使用的一样

didReceiveData:(NSData *)data
我需要以增量方式获取数据,因为我正在构建一个流式API,该API将获取大量JSON数据作为响应,并需要检查数据是否完整


如果有人能帮助我,那就太好了,我已经搜索了一段时间,到目前为止还没有找到令人满意的解决方案。

如果你尝试在Android中调用web服务,你应该使用
异步任务
,其中
请求将以
异步方式发出。看一看。每次完成请求时,都会调用方法
onPostExecute(对象结果)
。这是您可以继续进行进一步处理的方法。

包含以下示例:

URL url = new URL("ftp://mirror.csclub.uwaterloo.ca/index.html");
URLConnection urlConnection = url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
try {
 readStream(in);
 finally {
 in.close();
}

如果我正确理解您的问题,只需根据需要实现readStream函数。

我在朋友的帮助和一些链接中找到了如何实现这一点

您需要实现自己的ResponseHandler,如下所示:

class ChunkedResponseHandler implements ResponseHandler<String> {
    @Override
    public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {

        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
        StringBuffer output = new StringBuffer();

        byte[] b = new byte[4096];
        int n;

        while ((n = stream.read(b)) != -1) {
            output.append(new String(b, 0, n));  

            // do something while input is streaming
        }

        return output.toString();
    }
}
类ChunkedResponseHandler实现ResponseHandler{
@凌驾
公共字符串HandlerResponse(HttpResponse响应)抛出ClientProtocolException,IOException{
HttpEntity=response.getEntity();
InputStream=entity.getContent();
StringBuffer输出=新的StringBuffer();
字节[]b=新字节[4096];
int n;
而((n=stream.read(b))!=-1){
append(新字符串(b,0,n));
//在输入流时执行某些操作
}
返回output.toString();
}
}
现在,您只需在启动请求时分配响应处理程序:

HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet("someURL");

ResponseHandler<String> responseHandler = new ChunkedResponseHandler();
String responseBody = client.execute(postRequest, responseHandler);
HttpClient=newdefaulthttpclient();
HttpGet getRequest=newhttpget(“someURL”);
ResponseHandler ResponseHandler=新的ChunkedResponseHandler();
字符串responseBody=client.execute(postRequest,responseHandler);

是的,我已经知道这一点,我的请求已经在异步任务中实现。但我要搜索的是一个回调方法,它在请求仍在运行时返回已经接收到的数据。