Using Session Cookies With Android Volley Library By Jsonobjectrequest
How can I use session cookies using the volley library with a request like this? JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.
Solution 1:
This is the way I did to save cookies using Volley with JsonObjectRequest
The idea is to capture the Set-Cookie header that comes back with my Json request and then save it in preferences
Request
JsonObjectRequest request = newJsonObjectRequest(Request.Method.POST,
url,
(String)param,
requestFuture, requestFuture){
@OverridepublicStringgetBodyContentType() {
return"application/x-www-form-urlencoded";
}
@OverridepublicMap<String, String> getHeaders() throws AuthFailureError {
Show.m("getHeaders");
Map<String,String> headers = newHashMap<String, String>();
headers.put("Accept","application/json");
if(!MyApplication.getCookie(context).equals("")){
String cookie = MyApplication.getCookie(context);
Show.m("Cookie to load from preferences: " + cookie);
headers.put("Cookie", cookie);
}
return headers;
}
@OverrideprotectedResponse<JSONObject> parseNetworkResponse(NetworkResponse response) {
Map headers = response.headers;
String cookie = (String)headers.get("Set-Cookie");
MyApplication.saveCookie(context, cookie);
Show.m("Cookie to save to preferences: " + cookie);
returnsuper.parseNetworkResponse(response);
}
};
Preferences
publicstaticvoidsaveCookie(Context context, String cookie) {
if (cookie == null) {
return;
}
// Save in the preferencesSharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
if (null == sharedPreferences) {
return;
}
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("cookie", cookie);
editor.commit();
}
publicstaticStringgetCookie(Context context)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
String cookie = sharedPreferences.getString("cookie", "");
if (cookie.contains("expires")) {
removeCookie(context);
return"";
}
return cookie;
}
Solution 2:
BasicHttpParamsmHttpParams=newBasicHttpParams();
// Set the timeout in milliseconds until a connection is established.// The default value is zero, that means the timeout is not used.inttimeoutConnection=15000;
HttpConnectionParams.setConnectionTimeout(mHttpParams, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)// in milliseconds which is the timeout for waiting for data.inttimeoutSocket=20000;
HttpConnectionParams.setSoTimeout(mHttpParams, timeoutSocket);
SchemeRegistryregistry=newSchemeRegistry();
registry.register(newScheme("http", PlainSocketFactory.getSocketFactory(), 80));
finalSSLSocketFactorysslSocketFactory= SSLSocketFactory.getSocketFactory();
sslSocketFactory.setHostnameVerifier(SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
registry.register(newScheme("https", sslSocketFactory, 443));
/*ClientConnectionManager cm = new ThreadSafeClientConnManager(mHttpParams, registry);*/DefaultHttpClientdefaultHttpClient=newDefaultHttpClient(/*cm,*/ mHttpParams);
RequestQueuerequestQueue= Volley.newRequestQueue(mContext.getApplicationContext(),newHttpClientStack(defaultHttpClient));
Solution 3:
I use Volley Android Library because it like AFNetworking in iOS. Easier and Faster previous. About Cookies Session when login success. I configured:
CookieManagercookieManage=newCookieManager();
CookieHandler.setDefault(cookieManage);
And it ran success. But, CookieManage just execute in larger 8 versionSDK.
Like: in AndroidManifest.xml
<uses-sdkandroid:minSdkVersion="9"android:targetSdkVersion="17" /><uses-permissionandroid:name="android.permission.INTERNET"/>
Hope it can help you! Thanks.
Post a Comment for "Using Session Cookies With Android Volley Library By Jsonobjectrequest"