I'm developing an app using android 2.1.
I have a problem with using session cookies to login to a RESTful web service. The code works fine on the emulator, but when I run it on my HTC Magic, the cookie logic doesn't work. I've confirmed that the magic is receiving cookies in the headers by listing them (see attached). Can anyone say why the cookie store would be empty even tho they are in the headers?
public HttpProvider() {
Scheme http = new Scheme("http", new PlainSocketFactory(), 80);
SchemeRegistry registry = new SchemeRegistry();
registry.register(http);
client = new DefaultHttpClient(new ThreadSafeClientConnManager((new BasicHttpParams()), registry), new BasicHttpParams());
}
public void get(Request request) {
try {
HttpGet get = new HttpGet(request.url);
HttpResponse response = client.execute(get);
debugListHeaders(response, request.ticket);
debugListCookies();
}
}
void debugListHeaders(HttpResponse response, int ticket) {
Header[] headers = response.getAllHeaders();
Log.d(LOG, "Printing all headers" + " (" + ticket + ")");
for (Header header : headers) {
Log.d(LOG, "Header name: " + header.getName() + ", value: " + header.getValue() + " (" + ticket + ")");
}
Log.d(LOG, "All headers have been printed" + " (" + ticket + ")");
}
void debugListCookies() {
Log.d(LOG, "List cookies for connection");
for (Cookie cookie : client.getCookieStore().getCookies()) {
Log.d(LOG,
"Domain: " + cookie.getDomain() +
" Name: " + cookie.getName() +
" Path: " + cookie.getPath() +
" Value: " + cookie.getValue() +
" Expires: " + cookie.getExpiryDate().toString() +
" IsExpired: " + (cookie.isExpired(new Date()) ? "true" : "false"));
}
Log.d(LOG, "All cookies have been listed");
}
Thru the emulator:
<snipped header list as it's obviously working>
D/SessionProvider( 257): List cookies for connection
D/SessionProvider( 257): Domain:<snip> Name: S Path: / Value: 75XGSMR3BLLGYM0J Expires: Tue Oct 12 20:24:09 America/Barbados 2010
IsExpired: false
D/SessionProvider( 257): Domain: <snip> Name: lang Path: / Value: en Expires: Tue Oct 12 20:24:09 America/Barbados 2010 IsExpired: false
D/SessionProvider( 257): All cookies have been listed
Thru HTC Magic:
D/HttpProvider( 983): Printing all headers (-192275970)
D/HttpProvider( 983): Header name: Date, value: Thu, 14 Oct 2010 22:44:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Server, value: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0 (-192275970)
D/HttpProvider( 983): Header name: Set-Cookie, value: S=S41GM85A675Z8YQU; path=/; expires=Thu, 14-Oct-2010 23:14:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Set-Cookie, value: U=nibor.yarrum%40gmail.com; path=/; expires=Thu, 14-Oct-2010 23:14:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Set-Cookie, value: lang=en; path=/; expires=Thu, 14-Oct-2010 23:14:38 GMT (-192275970)
D/HttpProvider( 983): Header name: Vary, value: Accept-Encoding (-192275970)
D/HttpProvider( 983): Header name: Keep-Alive, value: timeout=15, max=100 (-192275970)
D/HttpProvider( 983): Header name: Connection, value: Keep-Alive (-192275970)
D/HttpProvider( 983): Header name: Transfer-Encoding, value: chunked (-192275970)
D/HttpProvider( 983): Header name: Content-Type, value: text/html (-192275970)
D/HttpProvider( 983): All headers have been printed (-192275970)
I/HttpProvider( 983): Request completed (-192275970)
D/SessionProvider( 983): List cookies for connection
D/SessionProvider( 983): All cookies have been listed