之前使用過XUtils框架做過項目,當時因為session糾結了好久,但是解決了,現在回想起來,好像沒有備份,趕緊寫份筆記備份下,以后方便使用。
主要是登陸服務器后,應該保存一個登陸狀態,登陸后,會保存個登陸狀態,只有保存這個狀才能有權限訪問對應的內容,否則,返回的是一堆html格式的網頁。
這時候,就會考慮到保存Cookie。直接上代碼吧:
這里是登陸界面:
MainActivity.java對應的import
import org.apache.http.client.CookieStore; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.DefaultHttpClient;
MainActivity.java
1 private void httpLogin() { 2 final HttpUtils http = new HttpUtils(); 3 RequestParams params = new RequestParams(); 4 String url = "http://192.168.1.60/auto/login_Login.action?oper.operatorName=123&oper.password=123"; 5 final String urlPost="http://192.168.1.60/auto/login_Login.action"; 6 params.addBodyParameter("oper.operatorName","123"); 7 params.addBodyParameter("oper.password","123"); 8 http.send(HttpRequest.HttpMethod.POST, 9 urlPost, 10 params, 11 new RequestCallBack<String>() { 12 13 @Override 14 public void onStart() { 15 pg.show(); 16 Log.d("jack",urlPost); 17 } 18 19 @Override 20 public void onLoading(long total, long current, boolean isUploading) { 21 pg.show(); 22 } 23 24 @Override 25 public void onSuccess(ResponseInfo<String> responseInfo) { 26 pg.dismiss(); 27 Log.d("jack",responseInfo.result); 28 //=========================== 29 // 取得sessionid......................... 30 31 DefaultHttpClient dh = (DefaultHttpClient) http.getHttpClient(); 32 MyCookieStore.cookieStore = dh.getCookieStore(); 33 CookieStore cs = dh.getCookieStore(); 34 List<Cookie> cookies = cs.getCookies(); 35 String aa = null; 36 for (int i = 0; i < cookies.size(); i++) { 37 if ("JSESSIONID".equals(cookies.get(i).getName())) { 38 aa = cookies.get(i).getValue(); 39 break; 40 } 41 } 42 Log.d("jack", "比較sessionid" + aa); 43 //=========================== 44 Intent intent = new Intent(MainActivity.this,SecondActivity.class); 45 startActivity(intent); 46 } 47 48 @Override 49 public void onFailure(HttpException error, String msg) { 50 pg.dismiss(); 51 Log.d("jack","哈哈"+msg); 52 } 53 }); 54 }
關鍵代碼:
1 //=========================== 2 // 取得sessionid......................... 3 DefaultHttpClient dh = (DefaultHttpClient) http.getHttpClient(); 4 MyCookieStore.cookieStore = dh.getCookieStore(); 5 CookieStore cs = dh.getCookieStore(); 6 List<Cookie> cookies = cs.getCookies(); 7 String aa = null; 8 for (int i = 0; i < cookies.size(); i++) { 9 if ("JSESSIONID".equals(cookies.get(i).getName())) { 10 aa = cookies.get(i).getValue(); 11 break; 12 } 13 } 14 Log.d("jack", "比較sessionid" + aa); 15 //===========================
這里面的MyCookieStore是自定義的一個保存類:
MyCookieStore.java
1 import org.apache.http.client.CookieStore; 2 3 public class MyCookieStore { 4 5 public static CookieStore cookieStore=null; 6 7 }
最后就是在登陸后訪問服務器的時候添加一句話:
http.configCookieStore(MyCookieStore.cookieStore);
給個類里的代碼看看吧:
SecondActivity.java
1 private void httpLogin() { 2 HttpUtils http = new HttpUtils(); 3 final String urlGet="http://192.168.1.60/auto/carModel_queryPL.action"; 4 http.configCookieStore(MyCookieStore.cookieStore); 5 http.send(HttpRequest.HttpMethod.POST, 6 urlGet, 7 new RequestCallBack<String>() { 8 9 @Override 10 public void onStart() { 11 pg.show(); 12 Log.d("jack",urlGet); 13 } 14 15 @Override 16 public void onLoading(long total, long current, boolean isUploading) { 17 pg.show(); 18 } 19 20 @Override 21 public void onSuccess(ResponseInfo<String> responseInfo) { 22 pg.dismiss(); 23 Log.d("jack","排量"+responseInfo.result); 24 } 25 26 @Override 27 public void onFailure(HttpException error, String msg) { 28 pg.dismiss(); 29 Log.d("jack","排量"+msg); 30 } 31 }); 32 }