Я пытаюсь сохранить в кеше ответ от сервера в течение определенного времени.
Есть следующие данные для сохранения в кеше: у меня есть List<ProgrammeItem>
, который я получаю с сервера. Пока пользователь работает, он может загрузить до ~ 230 List<ProgrammeItem>
(но достичь этого нереально, по оценкам, 10-50). ProgrammeItem
oblect, включая строки, int, int [].
Вот как я сохраняю и получаю последнюю загруженную List<ProgrammeItem>
:
//saving / getting Programme items
public boolean saveObject(List<ProgrammeItem> obj) {
final File suspend_f=new File(android.os.Environment.getExternalStorageDirectory(), "test");
FileOutputStream fos = null;
ObjectOutputStream oos = null;
boolean keep = true;
try {
fos = new FileOutputStream(suspend_f);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
} catch (Exception e) {
keep = false;
Log.e("catching exception ", "" + e.getMessage() + ";;;" + e);
} finally {
try {
if (oos != null) oos.close();
if (fos != null) fos.close();
if (keep == false) suspend_f.delete();
} catch (Exception e) { /* do nothing */ }
}
return keep;
}
public List<ProgrammeItem> getObject(Context c) {
final File suspend_f=new File(android.os.Environment.getExternalStorageDirectory(), "test");
List<ProgrammeItem> simpleClass= null;
FileInputStream fis = null;
ObjectInputStream is = null;
try {
fis = new FileInputStream(suspend_f);
is = new ObjectInputStream(fis);
simpleClass = (List<ProgrammeItem>) is.readObject();
} catch(Exception e) {
String val= e.getMessage();
} finally {
try {
if (fis != null) fis.close();
if (is != null) is.close();
} catch (Exception e) { }
}
return simpleClass;
}
Вот как я сохраняю и получаю объект в действии:
PI = new ProgrammeItem();
List<ProgrammeItem> programmeItems = new ArrayList<>();
...
//filling programmeItems with data from server
...
boolean result = PI.saveObject(programmeItems); //Save object
ProgrammeItem m = new ProgrammeItem();
List<ProgrammeItem> c = m.getObject(getApplicationContext()); //Get object
Вопрос: как я могу сохранить много своих объектов вместо одного?
Я думаю, что я должен сделать что-то вроде public boolean addObjectsInCache(List<ProgrammeItem> obj)
для добавления объектов, а не их переопределения.
И измените метод get на public List<ProgrammeItem> getObject(Context c, String id)
, где id
будет уникальным идентификатором, который будет включаться в каждый ProgrammeItem
в каждом List<ProgrammeItem>
.
Am I правильно? И как мне этого добиться? Может, вы покажете мне другой способ работы с объектами и кешем?