gpt4 book ai didi

android - 如何在 Android 上设置 Http 连接超时

转载 作者:太空狗 更新时间:2023-10-29 16:20:45 26 4
gpt4 key购买 nike

我正在编写一个连接到网络服务的应用程序,我不希望它在无法连接时等待太久。因此,我设置了 httpparams 的 connectionTimeout。但它似乎没有任何作用。

这是我的代码

public void doPost(ArrayList<NameValuePair> list) {

HttpPost post = new HttpPost(URL);
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);

httpClient.setParams(httpParameters);
try {
post.setEntity(new UrlEncodedFormEntity(list));
HttpResponse response = httpClient.execute(post);

Log.i("response ", response.toString());

Log.i("response code", ""
+ response.getStatusLine().getStatusCode());

if (response != null) {

HttpEntity entity = response.getEntity();

if (entity != null) {
InputStream instream = entity.getContent();
result = convertStreamToString(instream);
Log.i("Result ", result);
// Closing the input stream will trigger connection release
instream.close();
}
} else {
Log.i("SERVER ERROR ", "Server Not responding");
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

现在我添加异常(exception)

但是我的日志 cate dosent 在 5 秒内显示任何错误。它会在 2 3 分钟时给我错误。

这里有错误

03-26 12:36:59.165: W/System.err(491): java.net.SocketException: The operation timed out
03-26 12:36:59.165: W/System.err(491): at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method)
03-26 12:36:59.165: W/System.err(491): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115)
03-26 12:36:59.165: W/System.err(491): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244)
03-26 12:36:59.165: W/System.err(491): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533)
03-26 12:36:59.165: W/System.err(491): at java.net.Socket.connect(Socket.java:1055)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-26 12:36:59.165: W/System.err(491): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
03-26 12:36:59.165: W/System.err(491): at com.raa.json.JsonParser1.getJSONFromUrl(JsonParser1.java:39)
03-26 12:36:59.165: W/System.err(491): at com.raa.activity.ProductListActivity$MyTask.doInBackground(ProductListActivity.java:168)
03-26 12:36:59.165: W/System.err(491): at com.raa.activity.ProductListActivity$MyTask.doInBackground(ProductListActivity.java:1)
03-26 12:36:59.165: W/System.err(491): at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-26 12:36:59.165: W/System.err(491): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-26 12:36:59.165: W/System.err(491): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-26 12:36:59.165: W/System.err(491): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-26 12:36:59.165: W/System.err(491): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-26 12:36:59.165: W/System.err(491): at java.lang.Thread.run(Thread.java:1096)

最佳答案

试试这个,private static long TIME_OUT_IN_SECONDS = 120;

          System.out.println("posthhhhhhhhhhhhhhhhhhh");

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));

HttpResponse httpResponse = null;
long requestStratTime = new Date().getTime();

httpResponse = httpClient.execute(httpPost);
long requestEndTime = new Date().getTime();
Log.d("requestStratTime", "requestStratTime" + requestStratTime);
Log.d("requestEndTime", "requestEndTime" + requestEndTime);
long timeOfRequest = (requestEndTime - requestStratTime) / 1000;
Log.d("timeOfRequest", "timeOfRequest" + timeOfRequest);
if (httpResponse == null && timeOfRequest > TIME_OUT_IN_SECONDS) {

throw new TimeOutException();
}

int responseCode = httpResponse.getStatusLine().getStatusCode();
System.out.println("responseCode" + responseCode);
String ss = httpResponse.getStatusLine().toString();
System.out.println("ssssssssssssssssssssssss" + ss);
if (responseCode == 200) {

HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

} else {
throw new ParsingException();
}

关于android - 如何在 Android 上设置 Http 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com