Как преобразовать общий кешированный объект в определенный в Android - PullRequest
0 голосов
/ 03 июня 2011

У меня есть класс кэширования объектов, который может сохранить объект в памяти, проблема возникает, когда я пытаюсь получить его позже.Как вывести универсальный объект, а затем поместить его в определенный объект на другом конце.Вот класс

public class ObjectCache implements Serializable{

private static final long serialVersionUID = 1L;
private Context context;
private String objectName;
private Integer keepAlive = 86400;

public ObjectCache(Context context,String objectName) {
    this.context = context;
    this.objectName = objectName;
}

public void setKeepAlive(Integer time) {
    this.keepAlive = time;
}

public boolean saveObject(Object obj) {

    final File cacheDir = context.getCacheDir();
    FileOutputStream fos = null;
    ObjectOutputStream oos = null;

    if (!cacheDir.exists()) {
        cacheDir.mkdirs();
    }

    final File cacheFile = new File(cacheDir, objectName);

    try {

        fos = new FileOutputStream(cacheFile);
        oos = new ObjectOutputStream(fos);
        oos.writeObject(obj);
    } catch (Exception e) {
        e.printStackTrace();

    } finally {
        try {
            if (oos != null) {
                oos.close();
            }
            if (fos != null) {
                fos.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return true;
}

public boolean deleteObject() {

    final File cacheDir = context.getCacheDir();
    final File cacheFile = new File(cacheDir, objectName);
    return (cacheFile.delete());
}

public Object getObject() {

    final File cacheDir = context.getCacheDir();
    final File cacheFile = new File(cacheDir, objectName);

    Object simpleClass = null;
    FileInputStream fis = null;
    ObjectInputStream is = null;

    try {

        fis = new FileInputStream(cacheFile);
        is = new ObjectInputStream(fis);
        simpleClass = (Object) is.readObject();
    } catch (Exception e) {
        e.printStackTrace();

    } finally {
        try {
            if (fis != null) {
                fis.close();
            }
            if (is != null) {
                is.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return simpleClass;

}
}

И из действия я запускаю класс объекта, сохраняю его и извлекаю его так, как

objectCache = new ObjectCache(this,"sessionCache2");
//save object returns true
boolean result = objectCache.saveObject(s);

//get object back
Object o = objectCache.getObject();

вместо объекта или нужен объект Session, но тогда это будет означать, что возвращаемый тип метода getObject должен возвращать это.Не могу ли я преобразовать объект

1 Ответ

2 голосов
/ 03 июня 2011

Если вы уверены, что объект, который вернет ObjectCache, будет Session объектом, все, что вам нужно сделать, это разыграть его:

//get object back
Session session = (Session) objectCache.getObject();

Это выдаст ClassCastException (не проверено) если метод getObject() не возвращает объект Session.

...