Android 从URL下载xml作为Inputstream的最佳方法
我的代码如下,用于从as url下载xml内容,在wifi网络中下载需要更多时间,我的xml仅为29.2kb。我使用异步任务来完成这个任务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(
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您是否设法解决了问题?它帮助我减少了下载时间