android电商平台,新手入门 安卓电商系统基于OkHttp3的请求封装

最近有时间闲下来做一些以前工作的复习,翻到了上次的电商项目的代码,想起了那段用别人封装不顺手,自己又不会封装的痛苦时期,所以我决定把自己最终的劳动成果记录下来,方便以后的自己来看一看现在的自己有多蠢2333.

上次是我第一次做前后端的交互,我对交互的印象只有get ,post,put,delete四种请求,但是并不知道应该怎样具体实现它们,在登录注册以及表单提交中大多使用的是post请求,所以我新建了一个接口类管理这几种数据的提交方式

public interface IHttpClient {

IResponse get(IRequest request);

/**

* json类型的post

*

* @param request

* @return

*/

IResponse post(IRequest request);

/**

* 表单类型的post

*

* @param request

* @return

*/

IResponse put(IRequest request);

IResponse delete(IRequest request);

IResponse upload_image_post(IRequest request, Map map, File file);

}

另外新建IRequest类指定请求的方式,请求头等等

public interface IRequest {

public static final String POST = "POST";

public static final String GET = "GET";

public static final String PUT = "PUT";

public static final String DELETE = "DELETE";

/**

* 请求方式

*

* @param method

*/

void setMethod(String method);

/**

* 指定请求头

*

* @param key

* @param value

*/

void setHeader(String key, String value);

/**

* 指定请求信息

*

* @param key

* @param value

*/

void setBody(String key, Object value);

/**

* 提供给执行库请求行URL

*

* @return

*/

String getUrl();

/**

* 提供给执行库请求行URL

*

* @return

*/

Map getHeader();

/**

* 请求体

*

* @return

*/

String getBody();

}

使用Gson组装请求参数

public class RequestImpl implements IRequest {

private String method = "POST";

private String url;

private Map header;

private Map body;

public RequestImpl(String url) {

/**

* 初始化公共参数和头部信息

*/

this.url = url;

header = new HashMap();

body = new HashMap<>();

}

@Override

public void setMethod(String method) {

this.method = method;

}

@Override

public void setHeader(String key, String value) {

header.put(key, value);

}

@Override

public void setBody(String key, Object value) {

body.put(key, value);

}

@Override

public String getUrl() {

if (GET.equals(method)) {

// 组装post请求参数

for (String key : body.keySet()) {

url = url.replace("${" + key + "}", body.get(key).toString());

}

}

return url;

}

@Override

public Map getHeader() {

return header;

}

@Override

public String getBody() {

// 组装post请求参数

if (body != null) {

return new Gson().toJson(this.body, HashMap.class);

} else {

return "{}";

}

}

}

最后新建请求方法实现类,将四种请求全部重写,然后添加公共执行方法Execute

public class OkHttpClientImpl implements IHttpClient {

OkHttpClient mOkHttpClient = new OkHttpClient.Builder().build();

@Override

public IResponse get(IRequest request) {

/**

* 解析业务参数

*/

request.setMethod(IRequest.GET);

Map header = request.getHeader();

Request.Builder builder = new Request.Builder();

for (String key : header.keySet()) {

builder.header(key, header.get(key));

}

builder.url(request.getUrl()).get();

Request okRequest = builder.build();

return execute(okRequest);

}

/**

* POST请求

*

* @param request

* @return

*/

@Override

public IResponse post(IRequest request) {

request.setMethod(IRequest.POST);

MediaType mediaType = MediaType.parse("application/json; charset=utf-8");

RequestBody requestBody = RequestBody.create(mediaType, request.getBody().toString());

Map header = request.getHeader();

Request.Builder builder = new Request.Builder();

for (String key : header.keySet()) {

builder.header(key, header.get(key));

}

builder.url(request.getUrl())

.post(requestBody);

Request okRequest = builder.build();

return execute(okRequest);

}

/**

* PUT请求

*

* @param request

* @return

*/

@Override

public IResponse put(IRequest request) {

request.setMethod(IRequest.PUT);

MediaType mediaType = MediaType.parse("application/json; charset=utf-8");

RequestBody requestBody = RequestBody.create(mediaType, request.getBody().toString());

Map header = request.getHeader();

Request.Builder builder = new Request.Builder();

for (String key : header.keySet()) {

builder.header(key, header.get(key));

}

builder.url(request.getUrl())

.put(requestBody);

Request okRequest = builder.build();

return execute(okRequest);

}

/**

* GET请求

*

* @param request

* @return

*/

@Override

public IResponse delete(IRequest request) {

request.setMethod(IRequest.DELETE);

Map header = request.getHeader();

Request.Builder builder = new Request.Builder();

for (String key : header.keySet()) {

builder.header(key, header.get(key));

}

builder.url(request.getUrl())

.delete(null);

Request okRequest = builder.build();

return execute(okRequest);

}

/**

* 文件上传

*

* @param request

* @param map

* @param file

* @return

*/

@Override

public IResponse upload_image_post(IRequest request, Map map, File file) {

/**

* 实现文件上传

*/

request.setMethod(IRequest.POST);

MediaType MEDIA_TYPE_IMAGE = MediaType.parse("image/*");

MultipartBody.Builder requestBody = new MultipartBody

.Builder().setType(MultipartBody.FORM);

if (file != null) {

requestBody.addFormDataPart("image", file.getName(),

RequestBody.create(MEDIA_TYPE_IMAGE, file));

}

if (map != null) {

// map 里面是请求中所需要的 key 和 value

for (Map.Entry entry : map.entrySet()) {

requestBody.addFormDataPart(valueOf(entry.getKey()), valueOf(entry.getValue()));

}

}

Map header = request.getHeader();

Request.Builder builder = new Request.Builder();

for (String key : header.keySet()) {

builder.header(key, header.get(key));

}

builder.url(request.getUrl())

.post(requestBody.build());

Request okRequest = builder.build();

return execute(okRequest);

}

/**

* 公共Execute方法

*

* @param request

* @return

*/

private IResponse execute(Request request) {

ResponseImpl commonResponse = new ResponseImpl();

try {

Response response = mOkHttpClient.newCall(request).execute();

commonResponse.setCode(response.code());

String body = response.body().string();

commonResponse.setData(body);

} catch (IOException e) {

e.printStackTrace();

commonResponse.setCode(ResponseImpl.STATE_UNKNOW_ERROR);

commonResponse.setData(e.getMessage());

}

return commonResponse;

}

到这里封装就基本完成了,没有其他另类的东西,功能都是很基础的请求

下面有一个简单的使用示例

使用示例

IRequest request = new RequestImpl(这里传入url);

//设置请求头,这里要几个就setHeader几次

request.setHeader(key,value);

// 设置请求体 同上

request.setBody(key,value);

// 获取一个okhttpclient实例

IHttpClient mHttpClient = new OkHttpClientImpl();

// 得到服务器端返回的结果

IResponse response = mHttpClient.get(request);

注:图片的功能好像不能正常实现,也可能是我app出现问题,下次使用时会着重注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值