1. 程式人生 > >Android Cookie實現webview的同步登陸(主要是避免webview的再次登入)解決

Android Cookie實現webview的同步登陸(主要是避免webview的再次登入)解決

    研究這個問題也出了挺多的毛病的,主要是網上的博文實現是太坑人了,自己親自寫一篇

    步驟一:獲取cookie

    網上都是用HttpClient為例來獲取cookies的物件就像這個部落格我想大家不止看過一遍吧,如圖1.1這樣:

    

                                                                                       圖1.1

     相信都會有問題,大家申請網路資料都不是用HttpClient吧.應該都是用第三的申請網路方式,但是怎麼在第三方申請網路方式中獲取cookies呢 這個是個問題啊.而且這個時候申請網路資料一定要在登入的時候返回的網路資料才能得到cookies.這裡我用的是volley網路申請框架進行的.具體的程式碼實現如圖1.2

StringRequest stringRequest = new StringRequest( Request.Method.POST, requestUrl, new Response.Listener<String>() { @Override public void onResponse(String response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) {
@Override protected Response<String> parseNetworkResponse( NetworkResponse response) { try { Map<String, String> responseHeaders = response.headers; String rawCookies = responseHeaders.get("Set-Cookie");//cookie值 String dataString = new String(response.data,"UTF-8");//返回值 return
Response.success(dataString,HttpHeaderParser.parseCacheHeaders(response)); catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } } };                                            圖1.2

       一般來說都是將這個cookies值放在  SharedPreferences 設為全域性變數或者是使用handler傳送 把這個cookies傳入到你要使用的webview的那個Activity中去 ,這樣你才能夠使用.這裡面還有一個問題,也就是說基本上申請網路資料都是使用同一個方法申請 自己封裝起來,這樣就有問題,如果是登入成功返回來的json字串,你可以獲取到cookies.但是如果不是登入成功返回回來的字串的話,你不可能獲取到cookies 獲取的cookies是null 這個問題怎麼辦呢?筆者認為自己比較笨,這樣處理的, 圖1.3

                            圖1.3

    這種辦法就是把json解析出來 如果是是登入成功 ,就獲取cookies  不是 則不獲取 這個還是得看自己後臺登入成功後返回自己的字串是什麼樣子的 然後再來判斷

    步驟二:在要跳轉Activity裡面寫

       2.1 初始化webview:圖2.1


                   圖.2.1

      2.2 得到之前傳過去的cookie 這裡是用sharepreference傳值的 筆者這裡PreferenceUtil是自己封裝的方法 裡邊是其實就是sharepreference,如圖2.2 

          圖2.2

      2.3為cookiemanager設定cookie值:圖2.3

     

                               圖2.3

      2.4設定webview的屬性:圖2.4

             圖2.4

   2.5開啟webview 即可成功:圖2.5

                       圖2.5

 如此即可完成.