首先在build.gradle下的dependencies下添加引用。

implementation "com.squareup.okhttp3:okhttp:4.9.0"

然后编写HttpHelper的Get和Post方法。

public class HttpHelper {
public static final OkHttpClient client = new OkHttpClient();

public static void get(String url, ICallback_Comm callback) throws IOException {
new Thread(){
@Override
public void run(){
Request request = new Request.Builder()
.url(url)
.build();

try (Response response = client.newCall(request).execute()) {
String result = response.body().string();
callback.Call(result);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}.start();

}
//public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
public static final MediaType mediaType = MediaType.get("application/octet-stream; charset=utf-8");
public static void post(String url, String param, ICallback_Comm callback) throws IOException {
new Thread(){
@Override
public void run(){
RequestBody body = RequestBody.create(mediaType, param);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();

try (Response response = client.newCall(request).execute()) {
String result = response.body().string();
callback.Call(result);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}.start();

}
}

这里Post的MediaType设置成了application/octet-stream,因为我提交的数据是普通字符串,如果需要提交Json,则可设置为application/json。

使用HttpHelper模拟登陆。

Get:

 HttpHelper.get(AppConfig.WebApiCommUrl+"?para="+URLEncoder.encode("{\"LoginName\":\"admin\",\"Password\":\"admin\"}"),con->{ }); 

Post:

  HttpHelper.post(AppConfig.WebApiCommUrl,URLEncoder.encode("{\"LoginName\":\"admin\",\"Password\":\"admin\"}"),  con->{
LoginCommandResult baseResult = JsonHelper.Deserialize(LoginCommandResult.class ,con);
if(baseResult.IsSuccess){
}
else {
runOnUiThread(()->{
ShowMessage("登录失败,"+baseResult.Message);
});
}
runOnUiThread(()->{
loginButton.setEnabled(true);
loadingProgressBar.setVisibility(View.GONE);
});
});

PS1:Android中不能在子线程中来刷新UI线程。可以使用runOnUiThread切换回UI线程,然后控制UI。

 runOnUiThread(()->{
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
});

PS1:Alt+Insert会弹出自动生成菜单,选择Getter and Setter可以自动将字段生成属性,即生成get和set的属性函数。

PS3://region和//endregion组合可以折叠代码,类似C#的#region和#endregion。

PS4:获取集合长度,java里用size函数,比如If(list.size()>0),取第一个元素用get(index)方法,如list.get(0)。

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

OKhttp3的使用教程的更多相关文章

  1. 基本使用——OkHttp3详细使用教程

    基本使用——OkHttp3详细使用教程 转 https://blog.csdn.net/xx326664162/article/details/77714126 概述 OkHttp现在应该算是最火的H ...

  2. OKHttp3学习

    转载 Okhttp3基本使用 基本使用——OkHttp3详细使用教程 一.简介 HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽. OkHttp是一个 ...

  3. 一个C#开发搭建Android框架的心路历程

    前言 Java框架实在是太多了,因为是初学乍练,所以,只好以百度为标准选择框架了. Java的框架文章太难写了,因为他引用了太多框架,而没一个框架都有很繁琐的配置,把每个框架都写一遍,就等于写书了:所 ...

  4. [转]OkHttp3 最有营养的初级教程

    一.前言 自从Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp,而在Android6.0之后的SDK中google更是移除了对于HttpCl ...

  5. okhttp3教程(1)如何引入库

    官网: https://github.com/square/okhttp https://github.com/square/okio 1,使用okhttp3需要两个库 在build.gradle c ...

  6. OkHttp3使用教程,实现get、post请求发送,自动重试,打印响应日志。

    一.创建线程安全的okhttp单例 import service.NetworkIntercepter;import service.RetryIntercepter;import okhttp3.* ...

  7. okhttp教程——起步篇

    okhttp教程--起步篇 这篇文章主要总结Android著名网络框架-okhttp的基础使用,后续可能会有关于他的高级使用. okhttp是什么 okhttp是Android端的一个Http客户端, ...

  8. retrofit2 使用教程 及 Android 网络架构搭建 (原创)

    squareup 推出 retrofit2 已经有一段时间了,现在的版本比较稳定,没有什么大坑了.网络上的教程要么太简单,只是个Demo:要么有些落时,要么复用性比较差,所以自己写个教程,供大家参考. ...

  9. 【知识整理】这可能是最好的RxJava 2.x 入门教程(五)

    这可能是最好的RxJava 2.x入门教程系列专栏 文章链接: 这可能是最好的RxJava 2.x 入门教程(一) 这可能是最好的RxJava 2.x 入门教程(二) 这可能是最好的RxJava 2. ...

随机推荐

  1. C语言学习笔记---2.C语言数据类型

    1.C语言基本数据类型 1.1 int类型 int类型是有符号整型,即int类型的值必须是整数,可以是正整数.负整数或零.其取值范围依计算机系统而异.一般而言,储存一个int要占用一个机器字长. 声明 ...

  2. PHP中的日期相关函数(一)

    日期相关的操作函数是我们在日常的工作开发中最常接触到的功能.当然,大部分同学可能最多用到的就是 date() . time() 这两个函数,我们今天先不讲这两个函数,或许后面的文章也不太会讲它们,毕竟 ...

  3. 送你一个Python 数据排序的好方法

    摘要:学习 Pandas排序方法是开始或练习使用 Python进行基本数据分析的好方法.最常见的数据分析是使用电子表格.SQL或pandas 完成的.使用 Pandas 的一大优点是它可以处理大量数据 ...

  4. 定要过python二级 第11套

    1. 2.乃至好的代码片段与解决方法,我保存在了 H:盘中python中的:H:\python\python二级好的代码片段与错误解决 3.接着第一个点,为什么print(read(f))  把f 放 ...

  5. 关于go mod 的使用和goland 配置 go mod

    一.关于go modules 1.1 go modules 是go1.11 新加的特性 现在已有go 1.13.4 了本人用了就是最新版的 1.2关于modules 官方定义 模块是相关Go包的集合. ...

  6. 基于AM3352/AM3354/AM3358/AM3359的Linux 开发环境搭建(上)

    遇到不少人新手小白问,前辈如何搭建一个优良的Linux 开发环境?之前一直都是在用win开发,现在想要尝试用Linux做开发等等一系列的问题.开源一直是给电子行业工作者提供了一种向技术更深处进发的机遇 ...

  7. P5404-[CTS2019]重复【KMP,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P5404 题目大意 给出一个字符串\(S\),然后求有多少个长度为\(m\)的串\(T\)满足.无限多个串\(T\) ...

  8. P5934-[清华集训2012]最小生成树【最小割】

    正题 题目链接:https://www.luogu.com.cn/problem/P5934 题目大意 给出\(n\)个点\(m\)条边的一张图,再加入一条边\((u,v,L)\)求至少删掉多少条边可 ...

  9. 跳表--怎么让一个有序链表能够进行"二分"查找?

    对于一个有序数组,如果要查找其中的一个数,我们可以使用二分查找(Binary Search)算法,将它的时间复杂度降低为O(logn).那查找一个有序链表,有没有办法将其时间复杂度也降低为O(logn ...

  10. Windows10系统下Java JDK下载、安装与环境变量配置(全网最全步骤)

    1.首先要明确: JDK.JRE.JVM的含义 2.下载目前最新的JDK:Java SE Development Kit 17,传送门::https://www.oracle.com/java/tec ...