公司經理把我拉出來,死馬當活馬醫,作一個安卓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擴展寫,寫在外面也行,寫在這裏面也能夠,這樣就能夠了