Android 从URL下载xml作为Inputstream的最佳方法

Android 从URL下载xml作为Inputstream的最佳方法,android,Android,我的代码如下,用于从as url下载xml内容,在wifi网络中下载需要更多时间,我的xml仅为29.2kb。我使用异步任务来完成这个任务 InputStream getInputStreamForUrl(String url) { BufferedHttpEntity bufferedEntity = null; InputStream is = null; try { bufferedEntity = download(

我的代码如下,用于从as url下载xml内容,在wifi网络中下载需要更多时间,我的xml仅为29.2kb。我使用异步任务来完成这个任务

InputStream getInputStreamForUrl(String url) {
        BufferedHttpEntity bufferedEntity = null;
        InputStream is = null;
        try {
            bufferedEntity = download(url);
            if (bufferedEntity != null) {
                is = bufferedEntity.getContent();
                if (is != null) {
                    BufferedReader feedReader = new BufferedReader(new InputStreamReader(is, Utility.UTF_ENCODING),
                            16 * 1024);
                    Utility.cacheFeed(feedReader, url);
                }
            }
        } catch (NetworkNotAccessable e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (bufferedEntity != null) {
                    bufferedEntity.consumeContent();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return (url != null) ? Utility.getInputStreamForCache(url) : null;
    }
使用HttpGet请求的下载(url)方法Im如下:

public BufferedHttpEntity download(String url)
            throws ClientProtocolException, IOException, 
                    IllegalStateException, NetworkNotAccessable {
        HttpGet get = new HttpGet(url);
        HttpResponse response = mDefaultHttpClient.execute(get);
        int status = response.getStatusLine().getStatusCode();
        if (status != 200) {
            throw new NetworkNotAccessable(url + "error code:" + status);
        }   
        HttpEntity entity = response.getEntity();           
        BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);      

        while (bufHttpEntity.isStreaming()) {
            try {
                bufHttpEntity.wait(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return bufHttpEntity;
    }

请让我知道有没有最好的方法压缩整个url并下载它。

如果你说实际下载是在“下载(url)”方法中进行的,那么我恐怕看不到这种情况,下载方法也是从getInputStream方法调用的,你返回的inputstream方法看不到任何原因

还有,为什么要使用bufhttpenty.wait(500);这是一种阻塞状态(可能导致严重延迟)

在下载方法中使用以下代码检索xml:

    URL url = new URL(url);
       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
       try {
         InputStream in = new BufferedInputStream(urlConnection.getInputStream());
         byte buffer[] = new byte[4096];

         int count;
         String xmlData = "";
         while( (count = in.read(buffer)) != -1){
           xmlData += new String(buffer, 0, count);
       } finally {
         urlConnection.disconnect();
       }


             Log.d(TAG, " Data: " + xmlData );

如果您能够更改服务器代码,请放置Utility.cacheFeed和Utility.getInputStreamForCache(url)的代码,然后更改xml响应,并在客户端使用。这就是我如何最大限度地减少下载时间的方法。@user\u CC Utility.cacheFeed和Utility.getInputStreamForCache(url)使用url作为键缓存Bufferreader并通过提供url获取InputStream的方法。下载Inputstream后,我将更新本地chche。下载(字符串url)是进行下载的方法。@Adi您是否设法解决了问题?它帮助我减少了下载时间