okhttputils【 Android 一個改善的okHttp封裝庫】使用(二)


版權聲明:本文為HaiyuKing原創文章,轉載請注明出處!

上一篇講了如何在項目中導入OKHttputils庫的操作,這一篇主要講常見請求的寫法。

get請求

    public String getPersionTypeApi(StringCallback callback)
            throws Exception {
        String result = "";
        OkHttpUtils
                .get()
                .url(getSpcyUrl(ServerApi.GET_PERSION_TYPE_URL))
                .addParams("IS_JSON", "true")
                .addParams("VALUE_OBJES_4_JSON", "jsonMap")
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }

調用

    private void getPersionType(){
        try {
            LoginLogic.Instance(MainActivity.this).getPersionTypeApi(new GetPersionTypeStringCallback());
        } catch (Exception e) {
            e.printStackTrace();
        }
    } 

回調

public class GetPersionTypeStringCallback extends StringCallback
    {
        @Override
        public void onBefore(Request request, int id)
        {//showProgressDialog("");//顯示進度加載框
        }

        @Override
        public void onAfter(int id)
        {//dismissProgressDialog();//隱藏進度加載框
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {
            ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_again));
            Log.w(TAG,"{onError}e="+e.toString());
        }

        @Override
        public void onResponse(String response, int id)
        {
            Log.e(TAG, "onResponse:response="+response);
            switch (id)
            {
                case 100://http
                    try {
                        if (response != null && !"".equals(response)){
                            //解析
                        }
                        else {
                            ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_null_exception));
                        }
                    } catch (JSONException e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    }catch (Exception e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    } finally {
                    }
                    break;
                case 101://https
                    break;
            }
        }
        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.e(TAG, "inProgress:" + progress);
        }
    }

Post請求

public String LoginApi(String userName, String password,StringCallback callback)
            throws Exception {
        String result = "";
        OkHttpUtils
                .post()
                .url(getSpcyUrl(ServerApi.LOGIN_URL))
                .addParams("user.userName", userName)
                .addParams("user.password", password)
                .addParams("IS_JSON", "true")
                .addParams("loginModel", "mobile")
                .addParams("VALUE_OBJES_4_JSON", "loginUser")
                .addParams("userLoginModel", "mobile")
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
         return result;
    }

調用

    private void Login(){
        String userName = "xxx";
        String passWord = "sssxxxccccvvfddfggfgfg";
        try {
            LoginLogic.Instance(MainActivity.this).LoginApi(userName, passWord, new LoginStringCallback());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

回調

public class LoginStringCallback extends StringCallback
    {
        @Override
        public void onBefore(Request request, int id)
        {//showProgressDialog("");//顯示進度加載框
        }

        @Override
        public void onAfter(int id)
        {//dismissProgressDialog();//隱藏進度加載框
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {
            ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_again));
            Log.w(TAG,"{onError}e="+e.toString());
        }

        @Override
        public void onResponse(String response, int id)
        {
            Log.e(TAG, "onResponse:response="+response);
            switch (id)
            {
                case 100://http
                    try {
                        if (response != null && !"".equals(response)){
                            //解析登錄成功信息
                            JSONObject responseObj = new JSONObject(response);
                            
                        }
                        else {
                            ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_null_exception));
                        }
                    } catch (JSONException e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    }catch (Exception e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    } finally {
                    }
                    break;
                case 101://https
                    break;
            }
        }
        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.e(TAG, "inProgress:" + progress);
        }
    }

postString【Json數據】請求

    public String postJsonApi(PostJsonModel postJsonModel, StringCallback callback){
        String result = "";
        OkHttpUtils
                .postString()
                .url(getSpcyUrl(ServerApi.POSTJSON_URL))
                .content(new Gson().toJson(postJsonModel))
                .mediaType(MediaType.parse("application/json; charset=utf-8"))
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }
package com.why.project.okhttputilsdemo.model;

/**
 * Created by HaiyuKing
 * Used
 */

public class PostJsonModel {
    private String title = "";
    private String tic = "";
    private String type = "";

    public String getTic() {
        return tic;
    }

    public void setTic(String tic) {
        this.tic = tic;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
PostJsonModel.java

調用、回調【跟post、get請求的回調寫法類似】

post提交文件請求

    public String postFileApi(File file, StringCallback callback){
        String result = "";
        OkHttpUtils
                .postFile()
                .url(getSpcyUrl(ServerApi.POSTFILE_URL))
                .file(file)
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }

調用、回調【跟post、get請求的回調寫法類似】

上傳單個文件請求

    /**
     * 單個文件上傳接口
     */
    public String upLoadFileApi(String checktaskId, String clauseId, String checkClauseId, String filepath, String filename,StringCallback callback){
        String result = "";
        OkHttpUtils
                .post()
                .url(getSpcyUrl(ServerApi.UPLOAD_FILE_URL))
                .addFile("uploadUtil.file", filename, new File(filepath))
                .addParams("jcCheckTaskId", checktaskId)
                .addParams("clId", clauseId)
                .addParams("uploadUtil.checkClauseId", checkClauseId)
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }

調用

    private void upLoadFile(String filePath, String fileName){
        String checktaskId = "402881ca5d2b3f5c015d2b40da3a0002";
        String clauseId = "402881ca5d2b3f5c015d2b40dec30216";
        String checkClauseId = "40288188587234fe015872e256a300ab";
        LoginLogic.Instance(MainActivity.this).upLoadFileApi(checktaskId, clauseId, checkClauseId, filePath, fileName, new UpLoadFileStringCallback());
    }

 回調

public class UpLoadFileStringCallback extends StringCallback
    {
        public UpLoadFileStringCallback(){
        }

        @Override
        public void onBefore(Request request, int id)
        {//showProgressDialogUpload("");//顯示加載對話框
        }

        @Override
        public void onAfter(int id)
        {//dismissProgressDialog();//隱藏進度加載框
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_again));
        }

        @Override
        public void onResponse(String response, int id)
        {
            Log.e(TAG, "onResponse:response="+response);
            switch (id)
            {
                case 100://http
                    try {
                        if (response != null && !"".equals(response)){
                            //
                            JSONObject object = new JSONObject(response);
                            if(object.has("result") && object.getString("result").equals("上傳成功")){
                                ToastUtil.showShortToastCenter("上傳成功");
                            }else{
                                ToastUtil.showShortToastCenter("上傳失敗,請重試!");
                            }
                        } else {
                            ToastUtil.showShortToastCenter("上傳失敗,請重試!");
                        }
                    }catch (JSONException e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    }catch (Exception e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    } finally {
                    }
                    break;
                case 101://https
                    break;
            }
        }
        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.e(TAG, "inProgress:" + progress);//inProgress:0.99884826
            tv_result.setText("正在上傳:" + (int)(progress * 100)+"%");//模擬顯示進度值
            //ProgressWheelDialogUtil.setDialogMsg((int)(progress * 100)+"%");//更改上傳進度提示框的進度值
        }
    }

上傳多個文件的請求

/**
     * 多個文件上傳接口
     */
    public String upLoadFilesApi(String checktaskId, String clauseId, String checkClauseId, List<UploadFilesModel> uploadFilesModelList, StringCallback callback){
        String result = "";

        HashMap<String, File> fileMap = new HashMap<String,File>();
        for(int i=0;i<uploadFilesModelList.size();i++) {
            UploadFilesModel model = uploadFilesModelList.get(i);
            File file = new File(model.getFilePath());
            fileMap.put(model.getFileName(), file);
        }
        OkHttpUtils
                .post()
                .url(getSpcyUrl(ServerApi.UPLOAD_FILE_URL))
                .files("uploadUtil.file",fileMap)
                .addParams("jcCheckTaskId", checktaskId)
                .addParams("clId", clauseId)
                .addParams("uploadUtil.checkClauseId", checkClauseId)
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }
package com.why.project.okhttputilsdemo.model;

/**
 * Created by HaiyuKing
 * Used 上傳多個文件的model類
 */

public class UploadFilesModel {
    private String filePath;
    private String fileName;

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}
UploadFilesModel.java

調用

    private void upLoadFiles(List<UploadFilesModel> uploadFilesModelList){
        String checktaskId = "402881ca5d2b3f5c015d2b40da3a0002";
        String clauseId = "402881ca5d2b3f5c015d2b40dec30216";
        String checkClauseId = "40288188587234fe015872e256a300ab";
        LoginLogic.Instance(MainActivity.this).upLoadFilesApi(checktaskId, clauseId, checkClauseId, uploadFilesModelList, new UpLoadFilesStringCallback());
    }

 回調

/**
     * 文件上傳接口的自定義回調函數*/
    public class UpLoadFilesStringCallback extends StringCallback
    {
        public UpLoadFilesStringCallback(){
        }

        @Override
        public void onBefore(Request request, int id)
        {//showProgressDialogUpload("");//顯示加載對話框
        }

        @Override
        public void onAfter(int id)
        {//dismissProgressDialog();//隱藏進度加載框
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_again));
        }

        @Override
        public void onResponse(String response, int id)
        {
            Log.e(TAG, "onResponse:response="+response);
            switch (id)
            {
                case 100://http
                    try {
                        if (response != null && !"".equals(response)){
                            //
                            JSONObject object = new JSONObject(response);
                            if(object.has("result") && object.getString("result").equals("上傳成功")){
                                ToastUtil.showShortToastCenter("上傳成功");
                            }else{
                                ToastUtil.showShortToastCenter("上傳失敗,請重試!");
                            }
                        } else {
                            ToastUtil.showShortToastCenter("上傳失敗,請重試!");
                        }
                    }catch (JSONException e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    }catch (Exception e) {
                        ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.login_json_exception));
                    } finally {
                    }
                    break;
                case 101://https
                    break;
            }
        }
        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.e(TAG, "inProgress:" + progress);//inProgress:0.99884826
            tv_result.setText("正在上傳:" + (int)(progress * 100)+"%");//模擬顯示進度值
            //ProgressWheelDialogUtil.setDialogMsg((int)(progress * 100)+"%");//更改上傳進度提示框的進度值
        }
    }

下載文件請求【返回的下載值為文件大小】

    /**
     * 文件下載接口【返回的下載值為文件大小】
     */
    public String downloadFileApi(String fileid, FileCallBack callback){
        String result = "";
        OkHttpUtils
                .get()
                .url(getSpcyUrl(ServerApi.DOWNLOAD_FILE_URL))
                .addParams("fileid", fileid)
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }

調用

    private void downloadFile(){

        String fileSavepath = Environment.getExternalStorageDirectory().toString() + File.separator + "Download";//文件保存路徑
        String fileName = "download.jpg";//文件名稱【應該動態獲取,此處測試,所以寫死即可】
        String fileSize = "1.33MB";//文件大小,單位為KB、MB等【應該動態獲取,此處測試,所以寫死即可】

        String fileid = "402881ca5d2b3f5c015d2b4466d50284";
        LoginLogic.Instance(MainActivity.this).downloadFileApi(fileid, new DownLoadFileCallBack(fileSavepath, fileName,fileSize));
    }

回調

/**
     * 文件下載接口的自定義回調函數*/
    public class DownLoadFileCallBack extends FileCallBack
    {

        String fileSavepath = "";
        String filename = "";
        String fileSize = "";

        float fileSizeNum = 0.0f;

        /**
         * @param destFileDir
         * @param destFileName
         */
        public DownLoadFileCallBack(String destFileDir,String destFileName,String fileSize) {
            super(destFileDir, destFileName);
            this.fileSavepath = destFileDir;
            this.filename = destFileName;
            this.fileSize = fileSize;

            fileSizeNum = Float.parseFloat(fileSize.substring(0, fileSize.length() - 2));
        }

        @Override
        public void onBefore(Request request, int id)
        {//showProgressDialogUpload("");//顯示加載對話框
        }
        @Override
        public void onAfter(int id)
        {//dismissProgressDialog();//隱藏進度加載框
        }

        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.w(TAG,"{inProgress}progress="+progress);//情況一:顯示下載的文件大小,單位是B -1235527.0
            float progressABS = Math.abs(progress);//取正

            DecimalFormat df = new DecimalFormat("#.##");
            double progressKB = progressABS / 1024.0D;//獲取KB值
            if (fileSize.contains("MB"))
                progressABS = Float.parseFloat(df.format(progressKB / 1024.0D));//獲取MB值
            else
                progressABS = Float.parseFloat(df.format(progressKB));
            Log.e(TAG,"progressABS:" + progressABS);
            Log.e(TAG,"progressABS/fileSizeNum== :" + progressABS/fileSizeNum);

            tv_result.setText("下載進度:" + (int)(progressABS/fileSizeNum * 100)+"%");
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {
            ToastUtil.showShortToast("下載失敗");
        }

        @Override
        public void onResponse(File file, int id)
        {
            Log.e(TAG, "onResponse :" + file.getAbsolutePath());
            ToastUtil.showShortToast("下載成功");
        }

    }

下載文件請求【返回的下載值為文件下載的比例值】

    /**
     * 文件下載接口【返回的下載值為文件下載的比例值】
     */
    public String downloadFile2Api(FileCallBack callback){
        String result = "";
        OkHttpUtils
                .get()
                .url("http://download.sj.qq.com/upload/connAssitantDownload/upload/MobileAssistant_1.apk")
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }

調用

    private void downloadFile2(){

        String fileSavepath = Environment.getExternalStorageDirectory().toString() + File.separator + "Download";//文件保存路徑
        String fileName = "MobileAssistant_1.apk";//文件名稱【應該動態獲取,此處測試,所以寫死即可】

        LoginLogic.Instance(MainActivity.this).downloadFile2Api(new DownLoadFile2CallBack(fileSavepath, fileName));
    }

回調

/**
     * 文件下載接口的自定義回調函數*/
    public class DownLoadFile2CallBack extends FileCallBack
    {

        String fileSavepath = "";
        String filename = "";

        /**
         * @param destFileDir
         * @param destFileName
         */
        public DownLoadFile2CallBack(String destFileDir,
                                    String destFileName) {
            super(destFileDir, destFileName);
            this.fileSavepath = destFileDir;
            this.filename = destFileName;
        }

        @Override
        public void onBefore(Request request, int id)
        {//showProgressDialogUpload("");//顯示加載對話框
        }
        @Override
        public void onAfter(int id)
        {//dismissProgressDialog();//隱藏進度加載框
        }

        @Override
        public void inProgress(float progress, long total, int id)
        {
            Log.w(TAG,"{inProgress}progress="+progress);//情況一:下載進度值為文件的下載比例值 0.4827961
            float progress1 = Math.abs(progress);
            tv_result.setText("下載進度:" + (int)(progress1 * 100)+"%");
        }

        @Override
        public void onError(Call call, Exception e, int id)
        {
            ToastUtil.showShortToast("下載失敗");
        }

        @Override
        public void onResponse(File file, int id)
        {
            Log.e(TAG, "onResponse :" + file.getAbsolutePath());
            ToastUtil.showShortToast("下載成功");
        }

    }

同步請求【需要在子線程中執行

/**
     * 模擬同步請求--注銷*/
    public String LogoutApi() throws IOException {
        String result = "";
        //同步請求--用於在自定義的thread中執行
        Response response = OkHttpUtils
                .post()
                .url(getSpcyUrl(ServerApi.LOGOUT_URL))
                .addParams("IS_JSON", "true")
                .id(100)
                .tag(context)
                .build()
                .execute();
        //execute方法不傳入callback即為同步的請求,返回Response對象,需要自己解析
        InputStream responseIs = response.body().byteStream();
        BufferedReader responseBufferedReader = new BufferedReader(new InputStreamReader(responseIs, "utf-8"));
        StringBuilder responseStringBuilder = new StringBuilder();
        while (true)
        {
            String readLine = responseBufferedReader.readLine();
            if (readLine == null)
            {
                break;
            }
            responseStringBuilder.append(readLine);
        }
        responseIs.close();
        result = responseStringBuilder.toString();
        return result;
    }

調用

//模擬同步請求--注銷
        btn_synchronize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() { @Override public void run() { try { String logoutStr = LoginLogic.Instance(MainActivity.this).Logout(); Message msg = new Message(); msg.what = TOAST_SHOW; msg.obj = logoutStr; mHandler.sendMessage(msg); } catch (IOException e) { e.printStackTrace(); } } }).start();
            }
        });
    /**用於toast提示*/
    private static final int TOAST_SHOW = 18;
    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case TOAST_SHOW:
                    ToastUtil.showShortToast((String)msg.obj);
                    tv_result.setText((String)msg.obj);
                    break;
            }
        }
    };

單個請求添加cookie

    /**
     * 獲取接口
     */
    public String getNewsApi(StringCallback callback)
            throws Exception {
        String result = "";
        String SESSION_SERVER_HEAD = "JSESSIONID=";
        String SESSION_SERVER_ID = "9B17276F7C0CA4F309ABA0C93D87A3F8";
        OkHttpUtils
                .get()
                .url(getSpcyUrl(context.getString(R.string.get_news_url)))
                .addHeader("Cookie",SESSION_SERVER_HEAD + SESSION_SERVER_ID)
                .id(100)
                .tag(context)
                .build()
                .execute(callback);
        return result;
    }

獲取cookies【用於保存到SharedPreferences中】

    /**獲取cookies*/
    public static String getCookiesStr(){
        String cookiesInfo = "";
        CookieJar cookieJar = OkHttpUtils.getInstance().getOkHttpClient().cookieJar();
        if (cookieJar instanceof CookieJarImpl)
        {
            CookieStore cookieStore = ((CookieJarImpl) cookieJar).getCookieStore();
            List<Cookie> cookies = cookieStore.getCookies();
            for(Cookie cookie : cookies){
                cookiesInfo = cookiesInfo + cookie.name() + ":" + cookie.value() + ";";
            }
        }

        return cookiesInfo;
    }

清空cookies

/**清空cookie緩存*/
    public static void clearCookies()
    {
        CookieJar cookieJar = OkHttpUtils.getInstance().getOkHttpClient().cookieJar();
        if (cookieJar instanceof CookieJarImpl)
        {
            ((CookieJarImpl) cookieJar).getCookieStore().removeAll();
        }
       //需要清空webview中的cookie,https://www.cnblogs.com/umpjls/p/7319177.html
        CookieManager webViewCookieManager = CookieManager.getInstance();
        webViewCookieManager.removeAllCookie();
    }

webview異步cookies

    /**
     * Sync Cookie
     */
    public static void syncCookie(Context context, String url){
        try{
            LogUtil.d("Nat: webView.syncCookie.url", url);
            String sessionId = "";
            String loginmodel = "normal";//默認值是normal
            String domain = ServerApi.SERVER_URL_COOKIE;//默認值為域名(不含有http)
            String path = "/";//默認值為/

            //獲取保存的cookie信息
            String savedCookie = PreferencesUtils.getString(context,PreferencesUtils.COOKEY,"");//JSESSIONID:9B17276F7C0CA4F309ABA0C93D87A3F8;
            LogUtil.e(TAG,"savedCookie="+savedCookie);
            if(!TextUtils.isEmpty(savedCookie)){
                String[] cookies = savedCookie.split(";");
                for(int i=0;i<cookies.length;i++){
                    if(!TextUtils.isEmpty(cookies[i].trim())){
                        if(cookies[i].trim().contains("JSESSIONID")){
                            String[] cookie = cookies[i].split(":");
                            sessionId = cookie[1].trim();
                        }
                        if(cookies[i].trim().contains("loginmodel")){
                            String[] cookie = cookies[i].split(":");
                            loginmodel = cookie[1].trim();
                        }
                    }

                }

                LogUtil.d(TAG, "sessionId="+sessionId);
                LogUtil.d(TAG, "path="+path);

                //方式一【沒有起作用】
                /*CookieSyncManager.createInstance(context);

                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.setAcceptCookie(true);
                cookieManager.removeSessionCookie();// 移除
                cookieManager.removeAllCookie();
                CookieSyncManager.getInstance().sync();
                String oldCookie = cookieManager.getCookie(url);
                if(oldCookie != null){
                    LogUtil.d("Nat: webView.syncCookieOutter.oldCookie", oldCookie);
                }

                StringBuilder sbCookie = new StringBuilder();

                sbCookie.append(String.format("JSESSIONID=%s",sessionId));
                //ip地址的話應該是不需要設置的,只有在域名的情況下才可以設置
                sbCookie.append(String.format(";domain=%s", domain));
                sbCookie.append(String.format(";loginmodel=%s",loginmodel));
                sbCookie.append(String.format(";path=%s",path));
                String cookieValue = sbCookie.toString();
                cookieManager.setCookie(url,cookieValue);
                LogUtil.e(TAG,"cookieValue="+cookieValue);
                CookieSyncManager.getInstance().sync();*/

                //方式二
                CookieSyncManager.createInstance(context);
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.setAcceptCookie(true);
                cookieManager.removeSessionCookie();//移除
                cookieManager.removeAllCookie();//移除
                CookieSyncManager.getInstance().sync();
                cookieManager.setCookie(url, String.format("JSESSIONID=%s",sessionId));//
                cookieManager.setCookie(url, String.format("Domain=%s", domain));//
                cookieManager.setCookie(url, String.format("Path=%s",path));//
                cookieManager.setCookie(url, String.format("loginmodel=%s",loginmodel));//
                CookieSyncManager.getInstance().sync();

                String newCookie = cookieManager.getCookie(url);
                if(newCookie != null){
                    LogUtil.d("Nat: webView.syncCookie.newCookie", newCookie);//
                }
            }

        }catch(Exception e){
            LogUtil.e("Nat: webView.syncCookie failed", e.toString());
        }
    }

配置HTTPS請求

/**
     * 配置OkhttpClient
     */
    private void initOkHttp() {
        
        CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));//修改成自帶的cookie持久化,可以解決程序崩潰時返回到
        //ClearableCookieJar cookieJar1 = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(getApplicationContext()));
 SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); }

        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);//設置可訪問所有的https網站

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .connectTimeout(10000L, TimeUnit.MILLISECONDS)
        .readTimeout(10000L, TimeUnit.MILLISECONDS)
        //配置Log,通過設置攔截器實現,框架中提供了一個LoggerInterceptor,當然你可以自行實現一個Interceptor 
        .addInterceptor(new LoggerInterceptor("TAG"))
        //配置持久化Cookie(包含Session)
        .cookieJar(cookieJar)
        .hostnameVerifier(new HostnameVerifier()
        {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                // TODO Auto-generated method stub
                //return false;
                return true;
            }
        })
        //配置Https
        .sslSocketFactory(sslContext.getSocketFactory())
        .build();
        OkHttpUtils.initClient(okHttpClient);
    }

設置UA【默認為okhttp/3.3】

OkHttpUtils.head().addHeader("User-Agent","mobile");//設置UA,默認為okHttp的版本okhttp/3.3.0

在MyApplication.java中的initOkHttp方法中最后一行添加。

單個請求設置超時時間

public String checkServerUrlApi(Context context,String time,StringCallback callback) throws Exception{
        String result = "";
        OkHttpUtils
                .get()
                .url(getSpcyUrl(context.getString(R.string.check_url)))
                .addParams("time", time)
                .id(100)
                .tag(context)
                .build()
                .connTimeOut(3000L) .readTimeOut(3000L)
                .execute(callback);
        return result;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM