我正在为Android制作应用。我喜欢尽快拨打其他电话。当我将结果作为XML获取时,需要5秒钟(!)来获得这样的简单xml:
<souvenirs>
<souvenir>
<id>1</id>
<name>Example 1</name>
<rating>3.4</rating>
<photourl>/images/example.jpg</photourl>
<price>3.50</price>
</souvenir>
<souvenir>
<id>2</id>
<name>Example 2</name>
<rating>2.4</rating>
<photourl>/images/example.jpg</photourl>
<price>8.50</price>
</souvenir>
</souvenirs>
所以我用JSON试了一下。但这需要大约5秒钟来检索。
我使用以下代码在android中加载XML:
URL url = new URL("http://example.nu?method=getAllSouvenirs");
URLConnection conn = url.openConnection();
long t=System.currentTimeMillis();
InputStream ins = conn.getInputStream();
Log.d("info", String.valueOf((System.currentTimeMillis()-t)));
日志说输入流需要大约5000毫秒..有没有办法加速这个?有谁知道Android Market使用哪种技术?加载速度比我的应用程序快..
提前致谢! :)
答案 0 :(得分:2)
当您尝试通过浏览器或其他方式(wget,curl)“手动”获取数据时,需要多长时间。
在Android上,您还应考虑移动网络,这通常比桌面计算机慢得多。延迟也更大。
对我而言,这听起来很像后端的问题(例如,尝试解析客户端的IP,从而花费大量时间)。
答案 1 :(得分:1)
使用Apache HttpClient而不是URLConnection: Apache http client or URLConnection
编辑(2012-02-07):在较新的Android平台上不再适用请阅读:http://android-developers.blogspot.com/2011/09/androids-http-clients.html
答案 2 :(得分:0)
也许这就是它的实施方式,你什么也做不了。这是我的猜测。 我的意见是在你自己的线程上进行所有基于连接的东西(放入后台)和前台(主UI线程)娱乐用户。 :)
我已经玩了一点这个,它对我来说足够快......这是我的代码:
private static HttpResponse doPost(String url, JSONStringer json) {
try {
HttpPost request = new HttpPost(url);
StringEntity entity;
entity = new StringEntity(json.toString());
entity.setContentType("application/json;charset=UTF-8");
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8"));
request.setEntity(entity);
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
return response;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
在其他地方,我称这种方法为:
HttpResponse httpResponse = doPost(url, json);
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
对我来说很好......