我的HttpGet调用检索我的流,有时停止并且不会继续,即使在超时后

时间:2014-01-25 20:46:37

标签: android asynchronous inputstream http-get

我用来做两种类型的httpGet调用。一个用于使用Gson解析JSON,一个用于获取字符串,用于小型JSON ....

这是我用于使用GSON解析的内容:

    static HttpGet getRequest;
static HttpResponse getResponse;
@SuppressLint("NewApi")
public static InputStream retrieveStream(String url) {

    if (android.os.Build.VERSION.SDK_INT >= 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    int timeout = 30000;
    HttpParams httpParameters = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeout);
    HttpConnectionParams.setSoTimeout(httpParameters, timeout);
    DefaultHttpClient client = new DefaultHttpClient(httpParameters);

    getRequest = new HttpGet(url);

    try {

        getResponse = client.execute(getRequest);

        final int statusCode = getResponse.getStatusLine().getStatusCode();

        if (statusCode != HttpStatus.SC_OK) {
            Log.w("ERROR", "Error " + statusCode + " for URL " + url);
            return null;
        }

        HttpEntity getResponseEntity = getResponse.getEntity();

        return getResponseEntity.getContent();

    } catch (IOException e) {
        getRequest.abort();
        Log.w("ERROR", "Error for URL " + url, e);
    } catch (Exception e) {
        getRequest.abort();
        Log.w("ERROR", "Error for URL " + url, e);
    }

    return null;
}
  • 是的,几乎总是,如果JSON上有一些错误或没有连接,它会给我null并处理它。
  • 是的,几乎总是,如果JSON是正确的并且我有连接,我可以成功解析它。
  • 但很少次,我认为一个月内大约10或11,它什么都不做。它停止不会继续(我让它持续20分钟)。由于URL错误,JSON错误或TIMEOUT,它不会返回null,它只是停止。在那一刻,我的连接被停止(没有移动),但我的连接正常工作(因为我接收来自例如WhatsApp的消息)。 所以,如果我打开ProgressDialog,它永远不会关闭,因为我无法处理null或成功的InputStream,所以我不能让用户知道,在最糟糕的情况下,他/她有重试。

我正在制作所有这些东西异步

我做得不好?

提前致谢。

0 个答案:

没有答案