0

オブジェクトをメモリに保存できるオブジェクト キャッシング クラスがありますが、後で取得しようとすると問題が発生します。一般的なオブジェクトを出力し、それを反対側の定義済みオブジェクトに配置するにはどうすればよいですか。クラスはこちら

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();

Object oi の代わりに Session オブジェクトである必要がありますが、それは getObject メソッドの戻り値の型がそれを返す必要があることを意味します。オブジェクトを変換できませんか

4

1 に答える 1

2

ObjectCacheが返すオブジェクトがオブジェクトであることが確実な場合は、Sessionキャストするだけです。

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

メソッドがオブジェクトを返さないClassCastException場合、これは (未チェック)をスローします。getObject()Session

于 2011-06-03T02:19:33.303 に答える