简单封装OkHttp框架,单例模式。一句话即可使用。
返回值已进行JSON转换,拿到响应数据后的回调运行在主线程,可以直接修改UI。
已写get请求、post方式提交字符串、post方式提交表单、post方式上传图片,后续再添加。

依赖:

    //OkHttpimplementation 'com.squareup.okhttp3:okhttp:4.9.3'//Gsonimplementation 'com.google.code.gson:gson:2.8.5'

返回结果通用类:

/*** 服务端返回结果* @param <T>*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonResult<T> {//状态 0 成功  1失败private int state;//主要数据private String data;//附加数据private String msg;
}

工具类:

import android.app.Activity;
import android.util.Log;import com.google.gson.Gson;import org.jetbrains.annotations.NotNull;import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;/*** OkHttp工具类*/
public class OkHttpRequestUtil {private static OkHttpClient client;private static final OkHttpRequestUtil okHttpRequestUtil = new OkHttpRequestUtil();public static OkHttpRequestUtil getInstance() {return okHttpRequestUtil;}private OkHttpRequestUtil() {client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).readTimeout(10, TimeUnit.SECONDS).build();}public interface ICallBack {void onResponse(JsonResult result);}/*-------------------------------------------------------------------------------------------------------提供给外部调用的方法*//*** post方式提交Json字符串** @param activity  Activity* @param url       子路径* @param postBody  要发送的字符串* @param iCallBack 请求成功的回调*/public void stringPost(Activity activity, String url, String postBody, ICallBack iCallBack) {MediaType mediaType = MediaType.parse("application/json; charset=utf-8");RequestBody requestBody = RequestBody.create(postBody, mediaType);Request request = new Request.Builder().url(Interface.API + url).post(requestBody).build();Call call = client.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {Log.d("onFailure", e.getMessage());toast(activity);}@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {if (response.code() != 200) {toast(activity);} else {JsonResult jsonResult = new JsonResult();try {JSONObject jsonObject = new JSONObject(response.body().string());jsonResult.setState(jsonObject.getInt("state"));jsonResult.setData(jsonObject.getString("data"));jsonResult.setMsg(jsonObject.getString("msg"));} catch (JSONException e) {e.printStackTrace();}requestSuccess(activity, jsonResult, iCallBack);}}});}/*** post方式提交表单(已自动添加personToken)** @param activity  Activity* @param url       根路径后面的子路径* @param map       要发送的数据Map* @param iCallBack 请求成功的回调*/public void formPost(Activity activity, String url, Map<String, String> map, final ICallBack iCallBack) {FormBody.Builder builder = new FormBody.Builder();//从SharedPreference中取出personToken添加到表单中builder.add("id", activity.getSharedPreferences("user", Activity.MODE_PRIVATE).getString("personToken", ""));for (Map.Entry<String, String> entry : map.entrySet()) {builder.add(entry.getKey(), entry.getValue());}FormBody formBody = builder.build();Request request = new Request.Builder()//根路径拼接子路径.url(Interface.API + url).post(formBody).build();Call call = client.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {Log.d("onFailure", e.getMessage());toast(activity);}@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {if (response.code() != 200) {toast(activity);} else {JsonResult jsonResult = new JsonResult();try {JSONObject jsonObject = new JSONObject(response.body().string());jsonResult.setState(jsonObject.getInt("state"));jsonResult.setData(jsonObject.getString("data"));jsonResult.setMsg(jsonObject.getString("msg"));} catch (JSONException e) {e.printStackTrace();}requestSuccess(activity, jsonResult, iCallBack);}}});}/*** Post方式上传图片** @param activity  Activity* @param url       根路径后面的子路径* @param id        id* @param file      图片文件* @param iCallBack 请求成功的回调*/public void formFilePost(Activity activity, String url, String id, File file, final ICallBack iCallBack) {MediaType mediaType = MediaType.parse("image/png");RequestBody fileBody = RequestBody.create(file, mediaType);RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("file", "file", fileBody).addFormDataPart("id", id).build();Request request = new Request.Builder().url(Interface.API + url).post(requestBody).build();Call call = client.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {Log.d("onFailure", e.getMessage());toast(activity);}@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {if (response.code() != 200) {toast(activity);} else {JsonResult result = new Gson().fromJson(response.body().string(), JsonResult.class);requestSuccess(activity, result, iCallBack);}}});}/*** get请求(已自动添加personToken)** @param activity  Activity* @param url       根路径后面的子路径* @param map       要发送的数据Map* @param iCallBack 请求成功的回调*/public void get(Activity activity, String url, Map<String, String> map, final ICallBack iCallBack) {StringBuilder builder = new StringBuilder(url);//从SharedPreference中取出personToken拼接到url后面builder.append("?id=");builder.append(activity.getSharedPreferences("user", Activity.MODE_PRIVATE).getString("personToken", ""));for (Map.Entry<String, String> entry : map.entrySet()) {builder.append("&");builder.append(entry.getKey());builder.append("=");builder.append(entry.getValue());}Request request = new Request.Builder()//根路径拼接子路径.url(Interface.API + builder.toString()).get().build();Call call = client.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {Log.d("onFailure", e.getMessage());toast(activity);}@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {if (response.code() != 200) {toast(activity);} else {JsonResult jsonResult = new JsonResult();try {JSONObject jsonObject = new JSONObject(response.body().string());jsonResult.setState(jsonObject.getInt("state"));jsonResult.setData(jsonObject.getString("data"));jsonResult.setMsg(jsonObject.getString("msg"));} catch (JSONException e) {e.printStackTrace();}requestSuccess(activity, jsonResult, iCallBack);}}});}/*-------------------------------------------------------------------------------------------------------*//*** 请求成功后,将获取的数据传递给回调方法* 回调方法中的内容直接运行在主线程中** @param activity  Activity* @param result    JsonResult 拿到的数据* @param iCallBack 回调接口*/private static void requestSuccess(Activity activity, final JsonResult result, final ICallBack iCallBack) {activity.runOnUiThread(() -> {if (iCallBack != null) {iCallBack.onResponse(result);}});}private void toast(Activity activity) {Looper.prepare();Toast.makeText(activity, "网络连接失败", Toast.LENGTH_SHORT).show();Looper.loop();}
}

Activity中使用

Map<String, String> map = new HashMap<>();
map.put("enterpriseId", "1");
OkHttpRequestUtil.getInstance().formPost(this, "url", map, (result -> {// TODO something}));

说明:Interface是一个自定义类的名称,里面是一些public static final String的成员属性,用来保存一些服务器地址。

OkHttp简单封装相关推荐

  1. Android 对okhttp的封装

    不废话,需求:根据服务器API封装网络请求,怎么办? 简单封装okhttp的get,post,put,delete请求: PersistentCookieJar cookieJar = new Per ...

  2. Okhttp实用封装

    概述 对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码 详细 代码下载:http://www.demodashi.com/demo/11101.html 在自 ...

  3. OkHttp完美封装,一行搞完外部请求

    OkHttp完美封装,一行搞完外部请求 OKHttpUtil 在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不 ...

  4. Android APP更新下载工具类——简单封装DownloadManager

    几乎所有APP都包含了检查更新功能,更新下载功能的实现方式常用的有两种:1.使用App网络框架的文件下载请求:2.使用自带的DownloadManager类:本文介绍第二种,简单封装一下Downloa ...

  5. 简单封装浏览器 cookie 工具类

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...

  6. 小程序简单封装 request 请求

    我在这里做了详细的介绍 : 小程序简单封装 request 请求 转载于:https://www.cnblogs.com/biangz/p/9984340.html

  7. 简单封装 HTTP 请求

    2017-2-19 更新到第二版: 源码地址:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-base/src/com/ajaxjs/net ...

  8. 【JDBC】实现对JDBC 连接的简单封装

    package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...

  9. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  10. ios开发之使用多文件上传的简单封装最原始的

    ios开发之使用多文件上传的简单封装最原始的 // // ViewController.m // 18-上传多个文件 // // Created by 鲁军 on 2021/2/13. //#impo ...

最新文章

  1. mysql_upgrade --force_社区投稿 | MySQL 8.0.16 告别mysql_upgrade升级方式
  2. Jenkins 权限配置与集群配置
  3. Android下拉刷新SwipeRefreshLayout简单用法
  4. Code First02---CodeFirst配置实体与数据库映射的两种方式
  5. .NET Core使用FluentEmail发送邮件
  6. Keras自定义Loss函数
  7. 这样做,RMAN备份速度可提高6倍!
  8. Spring 层次性依赖查找Bean
  9. 2021-06-10 JUC01DAY
  10. 九型人格,工作中的好帮手.
  11. Modelica学习笔记1
  12. Percent Library百分比布局详解
  13. Spring Boot 2.0.6 整合 Spring Clod Bus + Kafka
  14. 使用C# .net开发微信公众号之服务器URL配置
  15. Google之Stopwatch 计时器
  16. MIME类型是什么意思
  17. docker-desktop和docer历史版本下载
  18. BZOJ4416: [Shoi2013]阶乘字符串
  19. Qt5--学习笔记-+openCV2-客户端、服务端回环视频显示
  20. 小小白学习c语言分享

热门文章

  1. 【2020年高被引学者】 陶哲轩 加州大学洛杉矶分校
  2. 基于不确定性量化的非精确概率可靠性理论
  3. English语法_定语从句 - 小细节
  4. Epicor流水编号规则功能
  5. iOS开发实战细节——通知写法
  6. SpringBoot AOP注解写法
  7. environment-modules安装配置
  8. FPGA开发板公司及产品系列
  9. 智能园区中的身份识别的原理是什么?
  10. 学习go语言里Duck typing 概念