Android 保持连接打开并读取数据,直到强制关闭

Android 保持连接打开并读取数据,直到强制关闭,android,httprequest,Android,Httprequest,当我的活动加载时,我正在连接到web服务。当我收到服务部门的回复时,我会再次呼叫,然后再呼叫服务部门,以此类推 @Override protected void onCreate(Bundle savedInstanceState) { …. callWebMethod(); } // Called on getting response @Override public void run(String value) { …. callWebMethod(); }

当我的活动加载时,我正在连接到web服务。当我收到服务部门的回复时,我会再次呼叫,然后再呼叫服务部门,以此类推

@Override
protected void onCreate(Bundle savedInstanceState) {  
….  
callWebMethod();
}  

// Called on getting response  
@Override
public void run(String value) {  
….  
callWebMethod();  
}  
这就是我连接到服务的方式

HttpGet request = new HttpGet(url + combinedParams);  
HttpClient client = new DefaultHttpClient(httpParameters);

    HttpResponse httpResponse;

        httpResponse = client.execute(request);
        responseCode = httpResponse.getStatusLine().getStatusCode();
        message = httpResponse.getStatusLine().getReasonPhrase();

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();
            response = convertStreamToString(instream);
            response = StringUtils.remove(response, "\n");
            response = StringUtils.remove(response, '"');
        }  
我是否可能在开始时只连接到服务一次,然后连接保持打开状态,应用程序继续从服务读取数据,直到连接被强制关闭。
如果需要更多代码,请告诉我

更新:然后我尝试使用ClientConnectionManager,但连接仍在反复初始化。尽管它正在获取数据。我想要的是连接保持打开状态,并继续从服务读取数据

HttpParams httpParameters=新的BasicHttpParams()


您只需在使用/读取完HttpResponse.getEntity().getContent()后关闭从HttpResponse.getEntity()获取的
InputStream
。这将正式表示您当前请求的结束

然后,您可以继续执行另一个请求,将使用相同的HttpClient连接

添加结束符

        InputStream instream = entity.getContent();
        response = convertStreamToString(instream); 
        // close the InputSream
        instream.close()

        // you can now reuse the same `HttpClient` and execute another request
        // using same connection
        httpResponse = client.execute(request);

听起来您真正需要的是套接字连接(请参阅)。套接字将保持连接,并允许您通过套接字服务器来回传输数据,直到完成

我是否可能一开始只连接一次服务, 然后连接保持打开状态

web服务器在这方面起着重要作用。如果服务器“结束”HTTP响应,则在同一HTTP调用上不会发生进一步的通信

在服务器的帮助下,可以保持HTTP连接打开。在这种情况下,服务器永远不会真正结束响应,而是在一段时间间隔后继续将数据写入响应流,所以客户端可以继续侦听

上述技术的新替代品是双工插座连接。客户端和服务器都可以通过套接字发送和接收消息。同样,客户端和服务器都必须正确地支持它,并且必须对连接断开等进行必要的处理


有一些特定于android的客户端实现,可以为您提供大部分连接管理

我认为您可以尝试使用
AsyncTask
类来保持线程处于打开状态,并执行所需操作,如下所示:

public class ConnectToWebService extends AsyncTask<Void, Void, Boolean> {

    @Override
    protected Boolean doInBackground(Void... params) { ... }

    @Override
    protected void onPostExecute(final Boolean success) { ... }

    @Override
    protected void onCancelled() { ... }
}
公共类ConnectToWebService扩展异步任务{
@凌驾
受保护的布尔doInBackground(Void…params){…}
@凌驾
受保护的void onPostExecute(最终布尔值成功){…}
@凌驾
受保护的void onCancelled(){…}
}

查看更多信息;)

连接还应该提供无限和连续的响应。您的意思是响应本身会一次又一次出现?使用startForeground()在前台而不是后台启动服务,告诉Android您知道并希望自己处理它。那么您正在寻找一个简单的HttpClient请求上的类似套接字的连接?不能按你期望的方式工作。你需要一个插座。。。见@Justin Powell答案!
public class ConnectToWebService extends AsyncTask<Void, Void, Boolean> {

    @Override
    protected Boolean doInBackground(Void... params) { ... }

    @Override
    protected void onPostExecute(final Boolean success) { ... }

    @Override
    protected void onCancelled() { ... }
}