• 0755-82538016
  • 0755-82560826
  • 深圳网站建设_APP小程序开发_博纳网络

    • 网站建设案例
      • ";

        营销网站建设

        全网营销网站

        高端网站建设

        商城网站建设

        外贸网站建设

        小程序开发

        区块链开发

        物联网项目开发

        定制app开发

        在线教育网站

        速成网站建设

        服装网站建设

        餐饮网站建设

        珠宝首饰网站

        机械制造网站

        文化旅游网站

        家装建材网站

        美容化妆品网站

        数码产品网站

        模板案例库

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站推广
      • ";

        网站优化基础

        建站优化

        网站优化

        营销推广

        整站优化

        推广帮助

        谷歌搜索

        推广方案

        推广套餐

        推广技巧

        百度排名

        巧用微博推广

        直播视频网站推广法

        微信推广网站方法

        网站外链推广

        公共微信号推广

        网站优化闲谈

        常见问题

        公司资讯

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站制作资讯
      • ";

        网站制作

        外贸网站建设

        网站设计

        网站代运营

        深圳网站建设专栏

        深圳小程序开发

        网站改版

        APP开发

        网站建设方案

        安全维护

        软件开发

        平台搭建

        建站行业资讯

        域名注册

        虚拟主机

        企业邮局

        国外主机

        VPS独享空间

        免备案香港服务器

        如何解析域名

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站报价
      • ";

        网站报价

        建站方案

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 公司动态
      • ";
        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 关注博纳
      • ";

        网站制作精英团队

        网站建设公司愿景

        公司介绍

        主营业务

        博纳文化

        加入博纳

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 联系我们
      • ";

        网站建设公司联系方式

        网站建设、网站制作公司乘车路线

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
      网站制作资讯

      当前位置:

        主页网站制作资讯APP开发开发APP对于怎样封装Volley网络库代码详解

      开发APP对于怎样封装Volley网络库代码详解

      发布时间:2019-03-09

      文章编辑:网站建设 文章来源:APP开发 浏览量:次

       APP开发公司分享Volley网络库的使用,为了使用方便,可以对Volley库提供的类和方法进行二次封装,深圳APP开发公司归纳整理其代码如下所示。
      public class JsonRequest extends JsonObjectRequest {     String cookieString;     public JsonRequest( String url, JSONObject jsonRequest,   Response. ErrorListener errorListener) {         super( url, jsonRequest, listener, errorListener);    }    //自定义向服务器发送的头字段数据    @ Override     public Map< String, String> getHeaders() throws AuthFailureError {         HashMap< String, String> headers = new HashMap< String, String>();        // 标示是Android APP向服务器发起请求         headers. put(" AppKey", "Android");        // 设置 User- Agent 的内容为 APP 的包名和版本信息,标示是哪个APP向服务器发起请求         String packageName = context. getPackageName();         PackageInfo info = context. getPackageManager(). getPackageInfo( packageName, 0);         userAgent = packageName + "/" + info. versionCode;         headers. put(" User- Agent",   userAgent );        //把服务器返回 给 APP 的 Cookie 信息, 添加到 PP发给服务器的头信息中, 标示访问服务器的客户身份         headers. put(" Cookie", cookieString);               return headers; }    @ Override     protected Response< JSONObject> parseNetworkResponse( NetworkResponse response) {         try {             String jsonString = new String( response. data,                           HttpHeaderParser. parseCharset( response. headers,                           PROTOCOL_ CHARSET));            // 获取服务器返回给APP的Cookie信息             Map< String, String> headers = response. headers;             cookieString = headers. get(" Set- Cookie");            // 解析服务器返回的 cookie 信息,从中获取 SessionID             String sessionId = parseVooleyCookie( cookies);             return Response. success( new JSONObject( jsonString),                     HttpHeaderParser. parseCacheHeaders( response));        } catch (UnsupportedEncodingException e) {             return Response. error( new ParseError( e));        } catch (JSONException je) {             return Response. error( new ParseError( je));        }
       }    // 解析 cookie 数据     public String parseVooleyCookie( String cookie) {         StringBuilder sb = new StringBuilder();         String[] cookievalues = cookie. split(";");         for (int j = 0; j < cookievalues. length; j++) {             String[] keyPair = cookievalues[ j]. split("/");             for (int i = 0; i < keyPair. length; i++) {                 if (keyPair[ 0]. contains(" session_ id")) {                     sb. append( keyPair[ 0]);                     sb. append(";");                     break;                }            }        }         return sb. toString();    } }
      使用OkHttp3作为Volley库的HTTP协议栈,需要实现HttpStack里定义的接口方法。APP开发公司整理协议栈的具体代码如下:
      public class OkHttp3Stack implements HttpStack {
        private final OkHttpClient mClient;     public OkHttp3Stack( OkHttpClient client) {         this. mClient = client;    }    @ Override     public HttpResponse performRequest( Request<?> request, Map< String, String> additionalHeaders)             throws IOException, AuthFailureError {         int timeoutMs = request. getTimeoutMs();         OkHttpClient client = mClient. newBuilder()                . readTimeout( timeoutMs, TimeUnit. MILLISECONDS)                . connectTimeout( timeoutMs, TimeUnit. MILLISECONDS)                . writeTimeout( timeoutMs, TimeUnit. MILLISECONDS)                . build();         okhttp3. Request. Builder okHttpRequestBuilder = new okhttp3. Request. Builder();         Map< String, String> headers = request. getHeaders();         for (final String name : headers. keySet()) {             okHttpRequestBuilder. addHeader( name, headers. get( name));        }         for (final String name : additionalHeaders. keySet()) {
      okHttpRequestBuilder. addHeader( name, additionalHeaders. get( name));        }         setConnectionParametersForRequest( okHttpRequestBuilder, request);         okhttp3. Request okhttp3Request = okHttpRequestBuilder. url( request. getUrl()). build();         Response okHttpResponse = client. newCall( okhttp3Request). execute();         StatusLine responseStatus = new BasicStatusLine                (                         parseProtocol( okHttpResponse. protocol()),                         okHttpResponse. code(),                         okHttpResponse. message()                );         BasicHttpResponse response = new BasicHttpResponse( responseStatus);         response. setEntity( entityFromOkHttpResponse( okHttpResponse));         Headers responseHeaders = okHttpResponse. headers();
        for (int i = 0, len = responseHeaders. size(); i < len; i++) {             final String name = responseHeaders. name( i), value = responseHeaders. value( i);             if (name != null) {                 response. addHeader( new BasicHeader( name, value));            }        }         return response;    }     private static HttpEntity entityFromOkHttpResponse( Response response) throws IOException {         BasicHttpEntity entity = new BasicHttpEntity();         ResponseBody body = response. body();         entity. setContent( body. byteStream());         entity. setContentLength( body. contentLength());         entity. setContentEncoding( response. header(" Content- Encoding"));         if (body. contentType() != null) {             entity. setContentType( body. contentType(). type());        }         return entity;    }
       @ SuppressWarnings(" deprecation")     private static void setConnectionParametersForRequest            ( okhttp3. Request. Builder builder, Request<?> request)             throws IOException, AuthFailureError {         switch (request. getMethod()) {             case Request. Method. DEPRECATED_ GET_ OR_ POST:                 byte[] postBody = request. getPostBody();                 if (postBody != null) {                     builder. post( RequestBody. create                            ( MediaType. parse( request. getPostBodyContentType()), postBody));                }                 break;             case Request. Method. GET:                 builder. get();                 break;             case Request. Method. DELETE:                 builder. delete();                 break;             case Request. Method. POST:                 builder. post( createRequestBody( request));                 break;
        case Request. Method. PUT:                 builder. put( createRequestBody( request));                 break;             case Request. Method. HEAD:                 builder. head();                 break;             case Request. Method. OPTIONS:                 builder. method(" OPTIONS", null);                 break;             case Request. Method. TRACE:                 builder. method(" TRACE", null);                 break;             case Request. Method. PATCH:                 builder. patch( createRequestBody( request));                 break;             default:                 throw new IllegalStateException(" Unknown method type.");        }    }
        private static RequestBody createRequestBody( Request request) throws AuthFailureError {         final byte[] body = request. getBody();         if (body == null) return null;         return RequestBody. create( MediaType. parse( request. getBodyContentType()), body);    }     private static ProtocolVersion parseProtocol( final Protocol protocol) {         switch (protocol) {             case HTTP_ 1_ 0:                 return new ProtocolVersion(" HTTP", 1, 0);             case HTTP_ 1_ 1:                 return new ProtocolVersion(" HTTP", 1, 1);             case SPDY_ 3:                 return new ProtocolVersion(" SPDY", 3, 1);             case HTTP_ 2:                 return new ProtocolVersion(" HTTP", 2, 0);        }         throw new IllegalAccessError(" Unkwown protocol");    } }
      还需增加一个类,提供其他模块调用Volley库的接口方法。
      public class NetworkManager {     private static NetworkManager mInstance;     private RequestQueue mRequestQueue;     private static Context mCtx;     private NetworkManager( Context context) {         mCtx = context;         mRequestQueue = getRequestQueue();    }    // 使用单列模式创建类的实例     public static synchronized NetworkManager getInstance( Context context) {         if (mInstance == null) {             mInstance = new NetworkManager( context);        }         return mInstance;    }     public RequestQueue getRequestQueue() {         if (mRequestQueue == null) {            // 设置 使用 OkHttp3 作为 HTTP 协议栈             mRequestQueue = Volley. newRequestQueue( mCtx, new
      OkHttp3Stack( new OkHttpClient()));        }         return mRequestQueue;    }     private < T> Request< T> add( Request< T> request) {         return mRequestQueue. add( request);// 添加请求到队列    }    /**     * 创建 JSON 格式的请求数据     *     */     public void JsonRequest( Object tag, String url, JSONObject jsonObject, Response. Listener< JSONObject> listener,                                 Response. ErrorListener errorListener) {         JsonRequest jsonRequest;         jsonRequest = new JsonRequest( url, jsonObject, listener, errorListener);         jsonRequest. setTag( tag);         add( jsonRequest);    }
       /**     * 取消请求     *     */     public void cancel( Object tag) {         mRequestQueue. cancelAll( tag);    } }
      函数调用方式如下:
      NetworkManager. getInstance( EamApplication. getContext()). JsonRequest( TAG, baseUrl + url, jsonObject,         new Response. Listener< JSONObject>() {            @ Override             public void onResponse( JSONObject jsonObject) {                 Log. v( TAG, "response json 对象: " + jsonObject. toString());            }        }, new Response. ErrorListener() {            @ Override             public void onErrorResponse( VolleyError error) {                 Log. e( TAG, error. getMessage(), error);
       }        });
      在创建网络对象实例时,使用Application级别的Context,保证实例的生命周期与APP的生命周期一样。好了,APP开发公司本文就“开发APP对于怎样封装Volley网络库代码详解”实操知识分享就到这里,谢谢关注,博纳网络编辑整理。
       
       

      当前文章链接:/construction/appkaifa/2343.html
      上一篇:开发APP关于Volley库支持的HTTP方法与代码分享 下一篇:APP开发关于设计模式(DesignPattern)的原则详解
      返回列表
      如果您觉得案例还不错请帮忙分享:

      [声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【qin@198bona.com 】,我们在确认后,会立即删除,保证您的版权。

      相关案例推荐

      • 立江租车行业网站制作案例

        立江租车行业网站制作案例

        行业网站

        立江租车行业网站制作案例

      • 大好汉字教育网站建站案列

        大好汉字教育网站建站案列

        政府教育

        大好汉字教育网站建站案列

      • 吴高岚

        吴高岚

        艺术/艺术家

        吴高岚

      资讯分类

      • 网站制作
      • 外贸网站建设
      • 网站设计
      • 网站代运营
      • 深圳网站建设专栏
      • 深圳小程序开发
      • 网站改版
      • APP开发
      • 网站建设方案
      • 安全维护
      • 软件开发
      • 平台搭建
      • 建站行业资讯
      • 域名注册
      • 虚拟主机
      • 企业邮局
      • 国外主机
      • VPS独享空间
      • 免备案香港服务器
      • 如何解析域名

      最新发布

      • 社区APP开发上线后影响用户使用的粘性有哪些?
      • 为什么说大健产业O2OAPP开发潜力无限
      • 网络公司对社区O2OAPP开发基本认识
      • 工业4.0时代怎样做好一个APP的开发工作?
      • APP开发公司分析APP应用开发下一个巨头在哪些领域?
      • APP电子商务平台开发前景如何?
      • 社交类型APP开发需要具备的五个必要条件
      • 社交类型APP平台开发使用小程序还是APP模式好?
      • 使用HTML语言开发APP商城可以吗?
      • 社区O2OAPP开发的方向选择

      相关资讯

      • APP网站制作流程以及栏目分布
      • 企业网站优化人员面对搜索引擎的困惑
      • 企业门户网站如何做好针对搜索引擎的优化工作
      • APP/PC购物商城网站如何做好产品图片的优化技巧
      • 网站软文内容以及网站外链存在的几种形式对网站有多大影响
      • 如何做好网站软文标题的描述更适合搜索引擎的需要?
      • 网站建设好后期出现被搜索引擎降权的几个主要因素
      • 小程序开发制作前途取决于市场,别被您的同行抢了先机
      • APP开发公司提醒您关注:电商平台要求商家“二选一”引多方不满 专家提建议
      • APP为什么会在我们的手机界面上变成僵尸图标?

      热门搜索

      • 网站优化
      • APP开发
      • 学校网站制作
      • 网站开发
      • 手机网站制作
      • 手机网站建设
      • 品牌网站建设
      • 企业网站建设
      • tP代运营
      • 网站开发公司

      Copyright © 2021 博纳网络 版权所有  粤ICP备17054727号

      • 🏠

        首页

      • 💬

        咨询

      • 📞

        通话

      • 📂

        案例

      • ⬆

        返回