3

我正在使用支持超时的 ksoap2 2.5.4(在 Android 2.2 上)。我正在使用 Apache 2.2.16 来处理我的请求。一切正常,但是当我关闭我的 Apache(或断开运行 Apache 的远程 PC)时,调用永远不会超时。我正在使用单独的线程来调用我的 WS,在这种情况下,该线程停止工作/响应/停止大约 2 分钟。

int MSG_TIMEOUT = 15000;
HttpTransportSE httpTransport;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
httpTransport = new HttpTransportSE(URL, MSG_TIMEOUT);
httpTransport.debug = true;
httpTransport.call(SOAP_ACTION, envelope);//thread stops responding here

我什至尝试在预定义的超时后使用 Timer 取消该线程,但它不起作用。线程仍然存在,正在等待 2 分钟。

TimerTask task;
Timer mTimer;
task = new TimerTask() {
  public void run() {               
    mThread.interrupt();
   }
 };
mTimer = new Timer();
mTimer.schedule(task, MSG_TIMEOUT);

我也收到了可能与它有关的警告(我不知道该怎么做):

Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.ksoap2.transport.KeepAliveHttpsTransportSE$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

是否有机会使 KSOAP 工作或改进计时器以在预定义的超时后中断该线程?感谢您的回答或任何想法尝试什么!

4

4 回答 4

6

使用 ksoap2 API 版本 2.5.2 或更高版本。

你可以点击这里下载

并在制作 HTTPTransport 对象时使用以下代码。

/**
 * Creates instance of HttpTransportSE with set url
 *
 * @param url
 *            the destination to POST SOAP data
 */
public HttpTransportSE(String url) {
    super(url);
}

/**
 * Creates instance of HttpTransportSE with set url
 *
 * @param url
 *            the destination to POST SOAP data
 * @param timeout
 *            timeout for connection and Read Timeouts (milliseconds)
 */
public HttpTransportSE(String url, int timeout) {
    super(url, timeout);
}
于 2011-08-30T05:03:10.960 回答
0

你有没有下载源代码然后编译它?还是您使用了完成的 JAR 文件?今晚或明天凌晨将进行测试。

于 2011-04-15T08:11:36.813 回答
0

这似乎仍然是 HttpTransportSE 在某些情况下忽略超时值的未解决问题。见相关:

http://code.google.com/p/ksoap2-android/issues/detail?id=52

http://code.google.com/p/ksoap2-android/issues/detail?id=60&q=httpTransportse%20timeout

于 2011-07-01T15:54:48.530 回答
0

我在运行 ksoap2-android-assembly-2.5.6-jar-with-dependencies 时遇到了同样的问题。我会假设出现在 HttpTransportSE 上的 ksoap 超时值等同于使用 org.apache.http.client.HttpClient 和连接超时和套接字超时参数可以完成的操作:

HttpClient 客户端 = 新 DefaultHttpClient(); HttpParams 参数 = client.getParams(); HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT); HttpConnectionParams.setSoTimeout(params, SOCKET_TIMEOUT);

无论我在 HttpTransportSE 的 timout 参数中输入什么值,大约 3 分钟后我终于得到了一个 SocketException“操作超时”。我的服务器正在运行,它只是没有响应请求。

于 2011-07-01T15:05:13.210 回答