日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
利用okhttp框架實(shí)現(xiàn)包含驗(yàn)證碼的用戶登錄,保持session操作(上)

一、 這篇文章要解決什么問(wèn)題,能學(xué)習(xí)到什么?

最近要做一個(gè)院務(wù)系統(tǒng)的項(xiàng)目,會(huì)把我的學(xué)習(xí)新知識(shí)的過(guò)程記錄下來(lái),本篇文章是實(shí)現(xiàn)登錄的操作,本來(lái)以為登錄的過(guò)程是一件比較簡(jiǎn)單的事情,但是深入了解過(guò)后還是有一定難度:

1. 在登錄過(guò)程中要獲取驗(yàn)證碼照片,利用http的get操作后,要穿參數(shù)過(guò)去服務(wù)器,就要用post。

2. 上述的get和post操作用很多現(xiàn)在網(wǎng)絡(luò)的框架都能實(shí)現(xiàn),比如volley,但是在獲取驗(yàn)證碼照片后是要進(jìn)行一個(gè)session的保持的,所以在查閱資料后利用okhttp框架來(lái)構(gòu)建這個(gè)項(xiàng)目比較方便快捷。

先來(lái)了解一下怎么使用okhttp:http://blog.csdn.net/itachi85/article/details/51190687

還有快速入門(mén)利用okhttp加載照片:

http://blog.csdn.net/bo543937071/article/details/53380651

二、問(wèn):什么是session和cookie?

簡(jiǎn)單來(lái)說(shuō),cookie就是客戶端的會(huì)話id,而session就是服務(wù)器端的會(huì)話id,根據(jù)這個(gè)id號(hào)可以查詢到你的會(huì)話內(nèi)容。

(想要了解更多cookie和session的知識(shí)可以點(diǎn)擊這里)

http://blog.csdn.net/Androidxiaogang/article/details/51925388

在本項(xiàng)目中用到的是驗(yàn)證碼照片的獲取,因?yàn)槊看嗡⑿买?yàn)證碼的url都會(huì)有不同的驗(yàn)證碼照片出現(xiàn),所以需要保存驗(yàn)證碼的session,不然別人怎么知道你和哪個(gè)驗(yàn)證碼進(jìn)行了“會(huì)話”。先上照片:

如圖分為四個(gè)步驟,結(jié)合文字更容易理解:

1. 客戶端發(fā)個(gè)請(qǐng)求驗(yàn)證碼照片的請(qǐng)求,帶回來(lái)了照片和一個(gè)jsessionid的字段存在用戶的cookie中。

2. 我們從cookie頭中取出這個(gè)session,然后打包參數(shù)發(fā)過(guò)去的時(shí)候順便帶上這個(gè)session,讓服務(wù)器這個(gè)家伙知道是誰(shuí)發(fā)的。

四個(gè)步驟兩點(diǎn)總結(jié),在加上代碼就更好理解了。

三、分析部分重要代碼 ***再貼上全部代碼

看一下后臺(tái)那邊給我們的數(shù)據(jù)有什么,有url_randCodeImage用來(lái)發(fā)送get請(qǐng)求獲取照片,還有url_login用來(lái)post數(shù)據(jù)過(guò)去,這些就是我們要打包發(fā)送過(guò)去的數(shù)據(jù):

還有我們的xml界面

首先是我們的驗(yàn)證碼照片的獲取與異步加載圖片

 
 
 
 
  1. //發(fā)送請(qǐng)求獲取驗(yàn)證碼照片
  2. private void ChangeImage() {
  3.         Request request = new Request.Builder()
  4.                 .url(App.url_randCodeImage)
  5.                 .build();
  6.         Call call = okHttpClient.newCall(request);
  7.         call.enqueue(new Callback() {
  8.             @Override
  9.             public void onFailure(Call call, IOException e) {
  10.                 Log.i("info_callFailure",e.toString());
  11.             }
  12.  
  13.             @Override
  14.             public void onResponse(Call call, Response response) throws IOException {
  15.                 byte[] byte_image =  response.body().bytes();
  16.  
  17.  
  18.                 //通過(guò)handler更新UI
  19.                 Message message = handler.obtainMessage();
  20.                 message.obj = byte_image;
  21.                 message.what = SUCCESS;
  22.                 Log.i("info_handler","handler");
  23.                 handler.sendMessage(message);
  24.  
  25.                 //獲取session的操作,session放在cookie頭,且取出后含有“;”,取出后為下面的 s (也就是jsesseionid)
  26.                 Headers headers = response.headers();
  27.                 Log.d("info_headers", "header " + headers);
  28.                 List cookies = headers.values("Set-Cookie");
  29.                 String session = cookies.get(0);
  30.                 Log.d("info_cookies", "onResponse-size: " + cookies);
  31.  
  32.                 s = session.substring(0, session.indexOf(";"));
  33.                 Log.i("info_s", "session is  :" + s);
  34.  
  35.             }
  36.         });
  37.     }
  38.  
  39. //異步加載圖片
  40. public Handler handler = new Handler(){
  41.         @Override
  42.         public void handleMessage(Message msg) {
  43.             switch (msg.what){
  44.                 //加載網(wǎng)絡(luò)成功進(jìn)行UI的更新,處理得到的圖片資源
  45.                 case SUCCESS:
  46.                     //通過(guò)message,拿到字節(jié)數(shù)組
  47.                     byte[] Picture = (byte[]) msg.obj;
  48.                     //使用BitmapFactory工廠,把字節(jié)數(shù)組轉(zhuǎn)化為bitmap
  49.                     Bitmap bitmap = BitmapFactory.decodeByteArray(Picture, 0, Picture.length);
  50.                     //通過(guò)imageview,設(shè)置圖片
  51.                     img_identy.setImageBitmap(bitmap);
  52.  
  53.                     break;
  54.                 //當(dāng)加載網(wǎng)絡(luò)失敗執(zhí)行的邏輯代碼
  55.                 case FALL:
  56.                     Toast.makeText(MainActivity.this, "網(wǎng)絡(luò)出現(xiàn)了問(wèn)題", Toast.LENGTH_SHORT).show();
  57.                     break;
  58.             }
  59.         }
  60.     }; 

獲取了照片和session之后,我們就打包發(fā)送數(shù)據(jù)過(guò)去:

 
 
 
 
  1. private void LoginServer() {
  2.         Log.i("info_Login","知道了session:"+s);
  3.         OkHttpClient client = new OkHttpClient();
  4.         FormBody body = new FormBody.Builder()
  5.                 .add("userName",et_username.getText().toString())
  6.                 .add("password",et_code.getText().toString())
  7.                 .add("randCode",et_identy.getText().toString())
  8.                 .add("langCode","zh-cn")
  9.                 .build();
  10.         Request request = new Request.Builder()
  11.                 .addHeader("cookie",s)
  12.                 .url(App.url_login)
  13.                 .post(body)
  14.                 .build();
  15.         Call call2 = okHttpClient.newCall(request);
  16.         call2.enqueue(new Callback() {
  17.             @Override
  18.             public void onFailure(Call call, IOException e) {
  19.                 Log.i("info_call2fail",e.toString());
  20.             }
  21.  
  22.             @Override
  23.             public void onResponse(Call call, Response response) throws IOException {
  24.                 if(response.isSuccessful()){
  25.                     Log.i("info_call2success",response.body().string());
  26.                 }
  27.                 Headers headers = response.headers();
  28.                 Log.i("info_respons.headers",headers+"");
  29.  
  30.             }
  31.         });
  32.     } 

***來(lái)看看我們成功登錄后log出來(lái)的信息

***貼上我們的全部代碼,希望對(duì)過(guò)程不太理解的小伙伴有所幫助:

接下文


名稱欄目:利用okhttp框架實(shí)現(xiàn)包含驗(yàn)證碼的用戶登錄,保持session操作(上)
新聞來(lái)源:http://m.5511xx.com/article/coihhgc.html