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

Создание кеша в InternalStorage - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Xamarin Xamarin Скачивание фаилов http://www.cyberforum.ru/android-dev/thread1506300.html
Ребята, какую неделю бью голову на тем как скачать файл в Xamarine! Может кто-нибудь привести пример? Помогите пожалуйста!)
Android EditText смещение области выделения в левый угол, как исправить Своя клавиатура, в текстовом поле область выделения стремится в левый верхний угол. Картинку прилагаю https://www.dropbox.com/s/yetxjjklkmyczdw/Screenshot_2015-07-25-15-42-58.png?dl=0 Разметка <EditText android:id="@+id/et_uemail" android:layout_width="775dp" android:layout_height="50dp" android:background="@drawable/box_shadow" http://www.cyberforum.ru/android-dev/thread1506254.html
Android Работа с Handler из другого активити
Здравствуйте, пишу чат приложение и не могу понять как можно обрабатывать входящие сообщение из другого активити. У меня есть форма авторизации где я устанавливаю хандлер на все входящие сообщения: ResultHandler handler = new ResultHandler(); MGey.setUpdates(handler); ResultHandler - отдельный класс куда идут все входящие сообщения. public class ResultHandler { @Override
Android Мнения по книге Б. Харди, Б. Филлипс Программирование под Android. Для профессионалов
Изучаю программирование под андроид и наткнулся на эту книгу, по началу радовала, но чем дальше двигался по изучению создания основного приложения книги CriminalIntent тем больше казалось, что либо я как-то долго догоняю, либо она написана не очень, либо еще чего. Что считаете по поводу книги?
Android Сохранение массива int-ов http://www.cyberforum.ru/android-dev/thread1506099.html
Я всегда сохранял нужные значения через SharedPreferences.Editor. Но встала потребность записать масив данных. Подскажите, как сохранить массив чисел инт? Вот так сохранял. Но ничего вроде PutIntarray или другого масива в SharedPreferences найти не могу. @Override protected void onResume() { super.onResume(); if (mSettings.contains(APP_PREFERENCES_COUNTER_X)) {...
Android Google maps на Android Здравствуйте формучане! Хотел узнать, почему на реальном устройстве могут не работать гугл карты? Вроде делал все как в инструктаже, на эмуляторе работает, на телефоне нет. В проекте создал Activity гугл карт, там в файле google_maps_api была ссылка, собственно по ней перешел на сайт и получил ключ. Его вставил в нужное место, а именно: <string name="google_maps_key" translatable="false"... подробнее

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

Создание кеша в InternalStorage - Android

28.07.2015, 19:07. Просмотров 163. Ответов 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());
            }
        }
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru