Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP Post完全退出线程,未捕获异常,或永远挂起_Java_Android - Fatal编程技术网

Java HTTP Post完全退出线程,未捕获异常,或永远挂起

Java HTTP Post完全退出线程,未捕获异常,或永远挂起,java,android,Java,Android,我知道我的代码会因为其他症状而消亡,但即使我尝试/捕获了所有东西,也从来没有任何消息。我现在终于通过使用连续的输出语句缩小了范围 String line = null; try { final HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 30000); DefaultH

我知道我的代码会因为其他症状而消亡,但即使我尝试/捕获了所有东西,也从来没有任何消息。我现在终于通过使用连续的输出语句缩小了范围

    String line = null;
    try {
        final HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 30000);    
        DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
        HttpPost httpPost = new HttpPost(url);
        postDebugMessage("GlobalApplication", "Info", "Executing httppost");
        HttpResponse httpResponse = httpClient.execute(httpPost);
        postDebugMessage("GlobalApplication", "Info", "Getting entity");
        HttpEntity entity = httpResponse.getEntity();
        postDebugMessage("GlobalApplication", "Info", "Converting to line");
        line = EntityUtils.toString(entity);   //<- the bad one
        postDebugMessage("GlobalApplication", "Info", "Conversion completed.");
    }
    catch (Exception ex) {
        // Any error occurring here we're going to state is
        // a network error.
        postDebugMessage("GlobalApplication", "Exception", ex.getStackTrace()[0].toString());
        throw new NetworkNotAvailableException(ex.toString());

    }
字符串行=null;
试一试{
最终HttpParams HttpParams=新的基本HttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,30000);
DefaultHttpClient httpClient=新的DefaultHttpClient(httpParams);
HttpPost HttpPost=新的HttpPost(url);
postDebugMessage(“GlobalApplication”、“Info”、“正在执行httppost”);
HttpResponse HttpResponse=httpClient.execute(httpPost);
postDebugMessage(“全局应用程序”、“信息”、“获取实体”);
HttpEntity entity=httpResponse.getEntity();
postDebugMessage(“全局应用程序”、“信息”、“转换为行”);

line=EntityUtils.toString(entity);//不一定。我怀疑您可能会得到一个扩展错误而不是异常的未检查异常。请尝试放置catch(Throwable t)并查看它是否捕获到异常。您可能不希望实际捕获这些异常,因为如果出现内存不足异常,系统随后的状态可能不可预测。

不一定。我怀疑您可能会得到一个扩展错误的未检查异常,而不是异常。请尝试放置捕获(可丢弃的t)然后查看它是否捕捉到了异常。您可能不希望实际捕捉到这些异常,因为如果出现内存不足异常,系统随后的状态可能不可预测。

EntityUtils.toString(entity)
首先读取一些数据,然后执行以下操作:

char[] tmp = new char[1024];
int l;
while((l = reader.read(tmp)) != -1) {
   buffer.append(tmp, 0, l);
}
因此,只要服务器发送更多数据,该方法就会被阻止。我希望您没有连接到流媒体服务?

EntityUtils。toString(entity)
首先读取一些数据,然后执行以下操作:

char[] tmp = new char[1024];
int l;
while((l = reader.read(tmp)) != -1) {
   buffer.append(tmp, 0, l);
}

因此,只要服务器发送更多数据,该方法就会被阻止。我希望您还没有连接到流媒体服务?

我将调用此应答,因为我已经解决了问题,但它与EntityUtils调用无关(至少据我所知)

完全退出线程并不是一个例外,它只是一个挂起的线程。罪魁祸首是我输入了连接超时,但不是套接字连接超时。文档说默认值是无限超时……这就是我看到的我要说的。我补充说:

  HttpConnectionParams.setSoTimeout(httpParams, 30000);
从那以后就再也没见过这个问题了

我知道至少有一个日志显示entityUtils调用从未完成,所以这让我认为是这样的,但之后更多的日志显示是.execute(httpPost)从未完成,所以这让我看了一下


感谢您的帮助!

我将呼叫此已应答,因为我已经解决了我的问题,但它似乎与EntityUtils呼叫无关(至少据我所知)

完全退出线程并不是一个例外,它只是一个挂起的线程。罪魁祸首是我输入了连接超时,但不是套接字连接超时。文档说默认值是无限超时……这就是我看到的我要说的。我补充说:

  HttpConnectionParams.setSoTimeout(httpParams, 30000);
从那以后就再也没见过这个问题了

我知道至少有一个日志显示entityUtils调用从未完成,所以这让我认为是这样的,但之后更多的日志显示是.execute(httpPost)从未完成,所以这让我看了一下


谢谢您的帮助!

是的,整个异常会捕获到它,所以这不是问题所在。是的,扩展java.lang.Exception并被try/catch块捕获。您的url是什么?响应应该是什么样子?您能确保服务器响应您期望的吗?我在“line”上执行操作我现在做一个显式检查,看看EntityUtils.toString()调用中的行是否为null。实际上,我用try/catch(异常)包围了这些行操作,所以我认为NPE稍后也会被捕获。我只是再次运行它,这次输出语句指示它在之后立即停止运行“执行Httppost"。从那时起,就不再有调试语句了。我想它可能会完全退出线程,或者永远挂起。我所有的问题似乎都在上面的try块中,但没有一个特定的位置。是的,整个异常会捕获它,所以这不是问题。是的,扩展java.lang.Exception并被捕获通过try/catch块。你的url是什么?响应应该是什么样子?你能确保服务器响应你期望的吗?我在“line”上做进一步的操作。我现在做一个显式的检查,看看在EntityUtils.toString()调用中line是否为null。我实际上有一个try/catch(异常)围绕着这些行操作,因此我认为NPE稍后也会被捕获。我只是再次运行它,这次输出语句表明它在“执行Httppost”后立即停止运行.从那时起,就不再有调试语句了。我想可能是完全退出线程,也可能是永远挂起。我所有的问题似乎都在上面的try块中,但没有一个特定的位置。然后他会得到一个崩溃报告。我没有得到任何类型的崩溃报告,应用程序也没有。它像norma一样继续l、 我将添加捕获(可丢弃的t)看看我能得到什么。如果我让设备运行足够长的时间,或者进入一个接收信号不稳定的区域,这似乎有点容易重复。我现在在整个过程中添加了大量捕获。它在恶劣的环境中运行了很长时间,到目前为止,它没有像以前那样失败。我看到的主要例外是IOException,操作超时。我没有得到任何gener