如何在android中执行缓存?

时间:2014-10-04 05:23:15

标签: android json caching

我正在构建一篇阅读像TechChurn这样的Android应用程序的文章。我以json的形式从服务器获取数据。

我正在从json解析Id(唯一),标题,作者姓名和文章内容,并在列表视图中显示它。

这些已解析的内容存储在本地,无需访问互联网即可访问。

我已经完成了使用缓存功能。 这是我用于缓存的代码 -

public final class CacheThis {
private CacheThis() {

}

public static void writeObject(Context context, String fileName,
        Object object) throws IOException {
    FileOutputStream fos;
    ObjectOutputStream oos;
    if (fileExistance(fileName, context)) {
        fos = context.openFileOutput(fileName, Context.MODE_PRIVATE
                | Context.MODE_APPEND);
        oos = new AppendingObjectOutputStream(fos);
    } else {
        fos = context.openFileOutput(fileName, Context.MODE_PRIVATE
                | Context.MODE_APPEND);
        oos = new ObjectOutputStream(fos);
    }
    oos.writeObject(object);
    oos.flush();
    oos.close();

    fos.close();
}

public static List<Object> readObject(Context context, String fileName) {
    List<Object> list = new ArrayList<Object>(0);
    FileInputStream fis;
    try {

        fis = context.openFileInput(fileName);

        ObjectInputStream ois = new ObjectInputStream(fis);
        Object object;
        try {
            while (true) {
                object = ois.readObject();
                list.add(object);
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        fis.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return list;
}

public static boolean fileExistance(String fname, Context context) {
    File file = context.getFileStreamPath(fname);
    return file.exists();
}

}

我的文章应该基于id缓存,而不是每次启动应用时都加载

1 个答案:

答案 0 :(得分:1)

使用以下方法存储和检索数据。在这里,您可以存储对象..

private void writeData(Object data, String fileName) {
        try {
            FileOutputStream fos = context.openFileOutput(fileName,
                    Context.MODE_PRIVATE);
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(data);
            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

public Object readData(String fileName){
        Object data = null;
        if (context != null) {
            try {
                FileInputStream fis = context.openFileInput(fileName);
                ObjectInputStream is = new ObjectInputStream(fis);
                data = is.readObject();
                is.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (StreamCorruptedException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return data;
    }

从服务器获得响应后写入数据(首次请求到服务器)。使用id作为文件名。之后,在您想要访问服务器以获取数据之前检查特定文件。如果该文件可用,则可以从该文件获取数据,否则命中服务器。