【发布时间】:2014-10-16 16:22:27
【问题描述】:
当我的活动加载时,我正在连接到网络服务。当我得到服务的响应时,我再次调用服务等等。
@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 = new BasicHttpParams();
SharedPreferences preferences = context.getSharedPreferences(
"MyPreferences", Context.MODE_PRIVATE);
int timeoutConnection = Integer.parseInt(preferences.getString(
"timeout", "60")) * 1000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, 2000);
System.setProperty("http.keepAlive", "true");
HttpClient client = new DefaultHttpClient(httpParameters);
ClientConnectionManager mgr = client.getConnectionManager();
client = new DefaultHttpClient(new ThreadSafeClientConnManager(
client.getParams(), mgr.getSchemeRegistry()),
client.getParams());
while (true) {
HttpResponse httpResponse;
try {
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, '"');
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
callback.run(response); // This calls activity callback function.
}
});
// Closing the input stream will trigger connection release
// instream.close();
}
} catch (ConnectTimeoutException e) {
….
}
【问题讨论】:
-
连接也应该提供无限和持续的响应
-
您的意思是响应本身会一次又一次地出现?
-
使用 startForeground() 在前台而不是后台启动你的服务,告诉 Android 你知道它并想自己处理它。 stackoverflow.com/questions/3856767/…
-
所以你正在寻找一个简单的 HttpClient 请求上的类似套接字的连接?不会按您预期的方式工作。
-
你需要一个 Socket... 查看@Justin Powell 的回答!
标签: android httprequest