Afinal 框架——FinalHttp请求时保存当前session并使用同一个session进行请求

当需要实现一个注册功能,通常都会使用手机号获取验证码进行注册,最为快捷,那么对于Android来说,在获取验证码的请求中需要保存服务器当前的session,在去传递验证码时,服务器会判断验证码是否失效或是不在同一个session中。

那么,客服端肯定需要保存Cookie,再下次请求时配置当前HTTPClient的CookieStore,返回给服务器。这样就与服务器保持同一个session,如下:

创建一个类MyCookieStore:

package cc.siyo.imenu.imenu_enjoy.model;

import org.apache.http.client.CookieStore;
/**
 * Created by Lemon on 2015/5/21.
 * Desc:用于存储CookieStore,请求处于同一session
 */
public class MyCookieStore {

    private static final String TAG = "MyCookieStore";
    public static CookieStore cookieStore=null;

}

 发送获取验证码的第一个请求,返回成功时,向服务器获取CookieStore:

finalHttp = new FinalHttp();
finalHttp.post(API.server, ajaxParams, new AjaxCallBack<String>() {
            @Override
            public void onFailure(Throwable t, int errorNo, String strMsg) {
                super.onFailure(t, errorNo, strMsg);
                closeProgressDialog();
                prompt(getResources().getString(R.string.request_time_out));
                System.out.println("errorNo:" + errorNo + ",strMsg:" + strMsg);
            }

            @Override
            public void onStart() {
                super.onStart();
                showProgressDialog(getResources().getString(R.string.loading));
            }

            @Override
            public void onLoading(long count, long current) {
                super.onLoading(count, current);
            }

            @Override
            public void onSuccess(String t) {
                super.onSuccess(t);
                //从服务器获取CookieStore,保存到MyCookieStore
                DefaultHttpClient client=(DefaultHttpClient)finalHttp.getHttpClient();
                MyCookieStore.cookieStore = client.getCookieStore();

                if (!StringUtils.isBlank(t)) {
                    Log.e(TAG, Constant.RESULT + API.GET_VERIFY_CODE + "\n" + t.toString());
                    JSONStatus jsonStatus = BaseJSONData(t);
                    if (jsonStatus.isSuccess) {
                        handler.sendMessage(handler.obtainMessage(GET_VERIFY_CODE_SUCCESS, BaseJSONData(t)));
                    } else {
                        handler.sendMessage(handler.obtainMessage(GET_VERIFY_CODE_FALSE, BaseJSONData(t)));
                    }
                } else {
                    prompt(getResources().getString(R.string.request_no_data));
                }
            }
        });
发送第二个请求时,配置finalHttp:
@Override
    public void initData() {
        finalHttp = new FinalHttp();
        //配置已保存的CookieStore,保证处于同一session中请求
        finalHttp.configCookieStore(MyCookieStore.cookieStore);
        finalHttp.post(API.server,  ajaxParams, new AjaxCallBack<String>() {
                        ......(省略)
        }
}

 

posted @ 2015-05-21 12:34  Lemon_SG  阅读(1169)  评论(0)    收藏  举报