如何在Android上改善我的休息电话?

时间:2011-04-20 11:20:09

标签: android xml json rest google-play

我正在为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使用哪种技术?加载速度比我的应用程序快..

提前致谢! :)

3 个答案:

答案 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"));

对我来说很好......