2121import android .content .Context ;
2222import android .content .SharedPreferences ;
2323import android .text .TextUtils ;
24+ import android .util .Log ;
2425
2526import org .apache .http .client .CookieStore ;
2627import org .apache .http .cookie .Cookie ;
4243 * regular old apache HttpClient/HttpContext if you prefer.
4344 */
4445public class PersistentCookieStore implements CookieStore {
46+ private static final String LOG_TAG = "PersistentCookieStore" ;
4547 private static final String COOKIE_PREFS = "CookiePrefsFile" ;
4648 private static final String COOKIE_NAME_STORE = "names" ;
4749 private static final String COOKIE_NAME_PREFIX = "cookie_" ;
@@ -143,12 +145,15 @@ public List<Cookie> getCookies() {
143145 return new ArrayList <Cookie >(cookies .values ());
144146 }
145147
146-
147- //
148- // Cookie serialization/deserialization
149- //
150-
148+ /**
149+ * Serializes Cookie object into String
150+ *
151+ * @param cookie cookie to be encoded, can be null
152+ * @return cookie encoded as String
153+ */
151154 protected String encodeCookie (SerializableCookie cookie ) {
155+ if (cookie == null )
156+ return null ;
152157 ByteArrayOutputStream os = new ByteArrayOutputStream ();
153158 try {
154159 ObjectOutputStream outputStream = new ObjectOutputStream (os );
@@ -160,27 +165,36 @@ protected String encodeCookie(SerializableCookie cookie) {
160165 return byteArrayToHexString (os .toByteArray ());
161166 }
162167
163- protected Cookie decodeCookie (String cookieStr ) {
164- byte [] bytes = hexStringToByteArray (cookieStr );
165- ByteArrayInputStream is = new ByteArrayInputStream (bytes );
168+ /**
169+ * Returns cookie decoded from cookie string
170+ *
171+ * @param cookieString string of cookie as returned from http request
172+ * @return decoded cookie or null if exception occured
173+ */
174+ protected Cookie decodeCookie (String cookieString ) {
175+ byte [] bytes = hexStringToByteArray (cookieString );
176+ ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream (bytes );
166177 Cookie cookie = null ;
167178 try {
168- ObjectInputStream ois = new ObjectInputStream (is );
169- cookie = ((SerializableCookie ) ois .readObject ()).getCookie ();
170- } catch (Exception e ) {
171- e . printStackTrace ( );
179+ ObjectInputStream objectInputStream = new ObjectInputStream (byteArrayInputStream );
180+ cookie = ((SerializableCookie ) objectInputStream .readObject ()).getCookie ();
181+ } catch (Exception exception ) {
182+ Log . d ( LOG_TAG , "decodeCookie failed" , exception );
172183 }
173184
174185 return cookie ;
175186 }
176187
177188 /**
178- * Using some super basic byte array <-> hex conversions so we don't have to rely on any large
179- * Base64 libraries. Can be overridden if you like!
189+ * Using some super basic byte array <-> hex conversions so we don't have to rely on any
190+ * large Base64 libraries. Can be overridden if you like!
191+ *
192+ * @param bytes byte array to be converted
193+ * @return string containing hex values
180194 */
181- protected String byteArrayToHexString (byte [] b ) {
182- StringBuilder sb = new StringBuilder (b .length * 2 );
183- for (byte element : b ) {
195+ protected String byteArrayToHexString (byte [] bytes ) {
196+ StringBuilder sb = new StringBuilder (bytes .length * 2 );
197+ for (byte element : bytes ) {
184198 int v = element & 0xff ;
185199 if (v < 16 ) {
186200 sb .append ('0' );
@@ -190,11 +204,17 @@ protected String byteArrayToHexString(byte[] b) {
190204 return sb .toString ().toUpperCase ();
191205 }
192206
193- protected byte [] hexStringToByteArray (String s ) {
194- int len = s .length ();
207+ /**
208+ * Converts hex values from strings to byte arra
209+ *
210+ * @param hexString string of hex-encoded values
211+ * @return decoded byte array
212+ */
213+ protected byte [] hexStringToByteArray (String hexString ) {
214+ int len = hexString .length ();
195215 byte [] data = new byte [len / 2 ];
196216 for (int i = 0 ; i < len ; i += 2 ) {
197- data [i / 2 ] = (byte ) ((Character .digit (s .charAt (i ), 16 ) << 4 ) + Character .digit (s .charAt (i + 1 ), 16 ));
217+ data [i / 2 ] = (byte ) ((Character .digit (hexString .charAt (i ), 16 ) << 4 ) + Character .digit (hexString .charAt (i + 1 ), 16 ));
198218 }
199219 return data ;
200220 }
0 commit comments