一个基于 retrofit + okhttp + json 封装的网络框架

网友投稿 792 2022-10-27

一个基于 retrofit + okhttp + json 封装的网络框架

一个基于 retrofit + okhttp + json 封装的网络框架

HttpRequest

一个基于 retrofit + okhttp + Gson 封装的网络框架.

目的:简化代码,方便找bug.

Usage

retrofit架构

首先需要讲工程中httprequest和utils包整个目录都拷贝到需要集成的工程做为Base包.

接着下来我需要做只需在api和httpresponse包添加api类以及Gson解析后对应的数据类代码如下:

Api类:

package cn.jianke.httprequest.httprequest.api;import java-.URLEncoder;import cn.jianke.httprequest.httprequest.ApiCallback;import cn.jianke.httprequest.httprequest.CommonApiRequest;import cn.jianke.httprequest.httprequest.CommonRetrofitCallback;import cn.jianke.sample.httprequest.httpresponse.LoginResponse;import retrofit2.Call;import retrofit2.http.GET;import retrofit2.http.Query;/** * @className: ApiLogin * @classDescription: 登陆api * @author: leibing * @createTime: 2016/8/12 */public class ApiLogin { // api private ApiStore mApiStore; /** * Constructor * @author leibing * @createTime 2016/08/30 * @lastModify 2016/08/30 * @param * @return */ public ApiLogin() { // 初始化api mApiStore = JkApiRequest.getInstance().create(ApiStore.class); } /** * 登录 * @author leibing * @createTime 2016/08/30 * @lastModify 2016/08/30 * @param username 用户名 * @param password 密码 * @param callback 回调 * @return */ public void Login(String username, String password, ApiCallback callback){ Call mCall = mApiStore.login(URLEncoder.encode(username), password); mCall.enqueue(new JkApiCallback(callback)); } /** * @interfaceName: ApiStore * @interfaceDescription: 登录模块api接口 * @author: leibing * @createTime: 2016/08/30 */ private interface ApiStore { @GET("app/User/Login") Call login( @Query("username") String username, @Query("userpass") String userpass); }}

对ApiLogin类用法分析:

ApiStore是作为登录模块集合接口,里面写了一个登录的方法login,有两个参数分别为用户名与密码. 回调返回数据类型为LoginResponse,这个接下来再讲,在ApiLogin构造函数中我们对Apistore接口做了 初始化工作,在调用登录方法Login使用了mApiLogin,mCall.enqueue做为异步调用方法,是在子线程中 操作的,收到callback回调后,我用JkApiCallback对此作了包装,为的是封装一些无需在使用时调用的操作, 比如判断收到数据是否为空,如果收到数据为空,此时会对此做为请求错误的回调.

LoginResponse类:

package cn.jianke.httprequest.httprequest.httpresponse;import java.io.Serializable;/** * @className: LoginResponse * @classDescription: 获取登录返回的信息 * @author: leibing * @createTime: 2016/08/30 */public class LoginResponse extends BaseResponse implements Serializable{ // 序列化UID 用于反序列化 private static final long serialVersionUID = 4863726647304575308L; // token public String accesstoken;}

对LoginResponse类用法分析:

这个Response类主要用做Gson解析数据后映射到该实例对象.如果我们要做将此对象通过序列化方式缓存的话,我们需要 将此类序列号并且把它的序列化UID写出来.Android Studio如何自动生成序列化UID?

Android Studio自动生成序列化UID操作如下:

File -> Settings... -> Editor -> Inspections -> Serialization issues -> Serializable class without ‘serialVersionUID‘(选中). 进入实现了Serializable中的类,选中类名,Alt+Enter弹出提示,然后直接导入完成.

okhttp架构

使用比较简单,请看代码:

/** * 通过okhttp请求数据 * @author leibing * @createTime 2017/4/11 * @lastModify 2017/4/11 * @param * @return */ private void requestByOkhttp(){ HashMap params = new HashMap(); params.put("month", month); params.put("day", day); params.put("key", key); OkHttpRequestUtils.getInstance().requestByGet(RequestUrlManager.HISTORY_TODAY_REQUEST_URL, params, HistoryTodayResponse.class, JkOkHttpCallBack.REQUEST_ID_ONE, this, new ApiCallback() { @Override public void onSuccess(Object response) { // 更新Ui updateUI((HistoryTodayResponse) response); } @Override public void onError(String err_msg) { if (StringUtil.isNotEmpty(err_msg)) Toast.makeText(HistoryTodayActivity.this, err_msg, Toast.LENGTH_SHORT).show(); } @Override public void onFailure() { Toast.makeText(HistoryTodayActivity.this, "网络不给力", Toast.LENGTH_SHORT).show(); } }); }

2017.04.11

retrofit架构

将数据解析从JkApiConvertFactory迁移到JkApiCallback中处理;增加对页面弱引用处理、加入Activity堆栈管理判断当前页再回调处理;根据请求标识处理对应数据格式,提高代码可读性,维护性;

okhttp架构(新增)

RequestUrlManager管理请求Url地址;OkHttpRequestUtils管理请求服务;JkOkHttpCallBack管理数据解析以及回调服务;

2017.05.06

将retrofit、okhttp基类封装到aar文件okhttp添加JkOkHttpUpDownFileUtils文件上传-封装

License

Copyright 2016 leibing

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:I/O实例操作
下一篇:工作一年后,我有些感悟(写于2017年)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~