Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Создание кеша в InternalStorage - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android EditText смещение области выделения в левый угол, как исправить http://www.cyberforum.ru/android-dev/thread1506254.html
Своя клавиатура, в текстовом поле область выделения стремится в левый верхний угол. Картинку прилагаю https://www.dropbox.com/s/yetxjjklkmyczdw/Screenshot_2015-07-25-15-42-58.png?dl=0 Разметка...
Программирование Android Работа с Handler из другого активити Здравствуйте, пишу чат приложение и не могу понять как можно обрабатывать входящие сообщение из другого активити. У меня есть форма авторизации где я устанавливаю хандлер на все входящие сообщения:... http://www.cyberforum.ru/android-dev/thread1506250.html
Программирование Android Мнения по книге Б. Харди, Б. Филлипс Программирование под Android. Для профессионалов
Изучаю программирование под андроид и наткнулся на эту книгу, по началу радовала, но чем дальше двигался по изучению создания основного приложения книги CriminalIntent тем больше казалось, что либо я...
Сохранение массива int-ов Программирование Android
Я всегда сохранял нужные значения через SharedPreferences.Editor. Но встала потребность записать масив данных. Подскажите, как сохранить массив чисел инт? Вот так сохранял. Но ничего вроде...
Программирование Android Google maps на Android http://www.cyberforum.ru/android-dev/thread1505970.html
Здравствуйте формучане! Хотел узнать, почему на реальном устройстве могут не работать гугл карты? Вроде делал все как в инструктаже, на эмуляторе работает, на телефоне нет. В проекте создал Activity...
Программирование Android Добавить элемент в toolbar слева Как можно добавить элемент в тулбар слева от заголовка? Как тут В моем случае всегда добавляется справа Код тулбара <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar... подробнее

Показать сообщение отдельно
Rembo88
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 39

Создание кеша в InternalStorage - Программирование Android

28.07.2015, 19:07. Просмотров 172. Ответов 0
Метки (Все метки)

Коллеги, доброго времени суток!
В моём приложении необходимо реализовать оффлайн режим и по сему возникла необходимость в создании механизма кеширования. Суть проста: обращаемся к сервису--> сохраняем данные в кеш--> получаем данные из кеша и отображаем на контролах. Вот тут и возникли некоторые проблемы...
Кеш успешно сохраняет и загружает примитивные типы и String, но отказывается делать это с объектом, который я получаю от сервиса(Объект реализует интерфейс Serializable). При этом исключения не выбрасываются - из кеша просто возвращается null. Буду благодарен,если кто-то сможет навести меня на мысль почему так происходит)) Код ниже:

Объект, который необходимо кешировать:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.Serializable;
 
/** Модель пользователя */
public class UserInfo implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    /**
     * Создание объекта, содержащего информацию о пользователе.
     * @param aName ФИО пользователя.
     * @param aPosition должность пользователя.
     * @param aLevel грейд.
     */
    public UserInfo(String aName, String aPosition, String aLevel) {
 
        this.name = aName;
        this.level = aLevel;
        this.position = aPosition;
    }
 
    /** ФИО пользователя */
    private String name;
    /** уровень пользователя */
    private String level;
    /** должность пользователя */
    private String position;
 
    /** Далее геттеры и сеттеры... */
Объект кеша:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public class Cache<T extends Serializable> {
 
    /** Singleton */
    private static volatile Cache instance;
    /** true - объект закеширован; false - объект не кеширован */
    private boolean isCached;
 
    private Cache() {
    }
 
    /** Получить инстанс кеша */
    public static synchronized Cache getInstance() {
 
        Cache localInstance = instance;
        if (localInstance == null) {
            synchronized (Cache.class) {
                localInstance = instance;
                if (localInstance == null) {
                    instance = localInstance = new Cache();
                }
            }
        }
        return localInstance;
    }
 
    // Положить объект в кеш
    public boolean putIntoCache(Context context, String fileName, T objectForCaching) {
        // Формируем путь к объекту для кеширования
        final File file = new File(context.getCacheDir(), fileName);
        // Проверяем,нужно ли заменить объект в кеше
        T restoreObject = fetchFromCache(context, fileName);
        // Если кеш пустой,то кешируем внешний объект
        if (restoreObject == null) {
            cache(file, objectForCaching);
            isCached = true;
        } else {
            // Если кеш не пустой,то сравниваем входящий объект и объект из кеша
            if (!restoreObject.equals(objectForCaching)) {
                cache(file, objectForCaching);
                isCached = true;
            } else {
                isCached = false;
            }
        }
        return isCached;
    }
 
    // Получить объект из кеша
    public T fetchFromCache(Context context, String fileName) {
 
        // Объект из кеша
        T restoreObject = null;
        // Формируем путь к объекту, который нужно достать из кеша
        final File file = new File(context.getCacheDir(), fileName);
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        // Достаём объект из кеша
        try {
            fis = new FileInputStream(file);
            ois = new ObjectInputStream(fis);
            restoreObject = (T) ois.readObject();
            ois.close();
        } catch (IOException ex) {
            Log.d("Cache class: ", ex.toString());
        } catch (ClassNotFoundException ex) {
            Log.d("Cache class: ", ex.toString());
        } finally {
            try {
                if (ois != null)
                    ois.close();
                if (fis != null)
                    fis.close();
            } catch (Exception e) {
                Log.d("Cache class: ", e.toString());
            }
        }
        return restoreObject;
    }
 
    // Кеширование
    private void cache(File file, T objectForCaching) {
 
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        // Сохраняем объект в кеш
        try {
            fos = new FileOutputStream(file);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(objectForCaching);
            oos.flush();
            oos.close();
            isCached = true;
        } catch (IOException ex) {
            isCached = false;
            Log.d("Cache class: ", ex.toString());
        } finally {
            try {
                if (oos != null)
                    oos.close();
                if (fos != null)
                    fos.close();
            } catch (Exception e) {
                Log.d("Cache class: ", e.toString());
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru