volley框架下的保持會話方法

         公司經理把我拉出來,死馬當活馬醫,作一個安卓app,做爲剛畢業幾個月且只是培訓了幾個月的小白來講,這無疑是一個很是大的挑戰,固然最大的挑戰不是這個,最大的挑戰時兩個周作出來。這是最蛋疼的,說實話,對於有兩三年的開發經驗的人來講,兩個周開發一個項目很簡單,說不定還有不少時間用來幹別的。服務器

       因而一上來就把本身給難住了,登錄仍是很好作的,只要驗證返回的信息就能夠跳轉,可是在接下來後面的數據接口鏈接的時候各類報錯,整了兩天,查了不少信息,還接受了公司老人的嘲諷和謾罵終於作出來了。cookie

       這個是基於session的一個網絡會話,手機app給服務器發送登錄請求的時候,服務器返回的網絡response(networkRespone)的頭(head)裏面存放着你想要的sessionid。這個時候只要重寫parseNetworkResponse就能夠了:網絡

 第一步:     在errorLitener後面添加這個方法獲取sessionidsession

 {
        protected Response<String>  parseNetworkResponse(NetworkResponse response){app

                Response<String>  r = super.parseNetworkReponse(response);url

                Map<String,String>  head = response.headers;調試

                String cookies = head.get("Set-Cookie");code

                Contant.cookie = cookies.substring(0,cookies.indexOf(";"));接口

                return r;開發

        }

};

以上是寫在最初登錄時候的頁面的。

第二步:

 Contant.cookie 這個是本身寫的一個全局變量,寫起來很簡單

 public class Contant{

    public static volatile String cookie = null; 

}

第三步:在發送數據請求的時候發送session

StringRequest request = new StringRequest(Request.Method.GET, url, listener,
                errorListener) {
            public Map<String, String> getHeaders() throws AuthFailureError {
                if (Contant.localCookie != null && Contant.localCookie.length() > 0) {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    headers.put("cookie", Contant.Cookie);
                    Log.d("調試", "headers--" + headers);
                    return headers;
                }else {
                    return super.getHeaders();
                }
            }
        };

這裏面的listener和errorlistener擴展寫,寫在外面也行,寫在這裏面也能夠,這樣就能夠了

相關文章
相關標籤/搜索