Cookieを永続化することになったので調べた。android-async-httpのPersistentCookieStoreを使うと簡単に永続化できそうだけど、そのためにライブラリをインストールするのはイヤだったので自作しました。
CookieクラスはSerializableを継承していないので、Serializeするには別のクラスにデータを詰め替える必要がある。 以下のSerializableCookie.javaを使うのが楽でした。
android-async-http/SerializableCookie.java at master · loopj/android-async-http · GitHub
SerializableなObjectをStringに変換するには、以下のメソッドを使う。JDKにこういうメソッドないのかな。。
/** Read the object from Base64 string. */
private static Object fromString( String s ) throws IOException , ClassNotFoundException { byte [] data = Base64.getDecoder().decode( s ); ObjectInputStream ois = new ObjectInputStream( new ByteArrayInputStream( data ) ); Object o = ois.readObject(); ois.close(); return o; }
/** Write the object to a Base64 string. */
private static String toString( Serializable o ) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( baos );
oos.writeObject( o );
oos.close();
return Base64.getEncoder().encodeToString(baos.toByteArray());
}
これで無事オブジェクトをDBに保存したり復元したり出来るようになった。
参考: