Skip to content Skip to sidebar Skip to footer

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"