困惑于使用什么 - 首选项或SQLite或文件?

时间:2012-03-22 14:48:40

标签: android caching android-listview

我有一个包含100多行的列表视图。每次用户打开应用程序时,它都会加载来自http的所有数据。我想缓存这些数据,以便如果要打开该活动,它应该从缓存中获取,而不是每次都从http中获取。

我也在考虑添加一些标志来清除缓存(如果由于某种原因,如果我的URL更改它不应该读取缓存版本而不是获取最新的URL

我不确定在sd卡和sqllite中使用缓存是什么。

我的listview包含网址,艺术家,名字......这些都是这样的引用:

<song>
    <id>1</id>
    <title>Someone Like You</title>
    <artist>Adele</artist>
    <duration>4:47</duration>
    <plays>1662</plays>
    <songs_url>http://website/music/someonelikeyou.mp3</songs_url>
    <thumb_url>http://website/music/images/adele.png</thumb_url>
</song>

这是从http:

读取的代码
// Getting XML from URL making HTTP request
// @param url string
public String getXmlFromUrl(String url) {
    String xml = null;

    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // return XML
    return xml;
}

2 个答案:

答案 0 :(得分:1)

SQLite当然。这是为了拥有这样的信息之王。选择过滤后的信息非常快捷。
对于图像(如拇指),请使用缓存文件夹:context.getExternalCacheDir().getAbsolutePath()

答案 1 :(得分:0)

以下是两个主要案例:

  1. 从互联网加载XML。
  2. 将日期戳与之前在缓存文件夹中保存的XML(如果存在)进行比较
  3. 如果需要更新,则删除旧XML并将新XML保存到缓存文件夹。
  4. 解析XML并向用户显示数据。

  5. 从互联网上加载XML

  6. 比较日期戳
  7. 如果需要更新,请更新DB
  8. 向用户显示数据。
  9. 保存和删除XML文件比清除数据库“更难”操作 您可以从数据库中清除特定项目。 /你无法用XML做到这一点 您可以从数据库中查询过滤后的数据。 /你不能用XML(仅在解析后) 您可以添加数据库附加列,如图像缓存文件夹路径等。
    获取数据并将数据保存到数据库是更快更优雅的方式。