首先在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. IO流实现GBK写入文件然后转换UTF-8

    public static void main(String[] args) throws IOException { File file = new File("olol\\a.txt&q ...

  2. 远程桌面连接(mstsc)全攻略

    打算从今天开始,写一写我经常用的,有长时间使用经验的东西,与大家分享,就从mstsc开始吧! mstsc应该是在Windows中,除了calc.cmd.notepad.mspaint,我使用率最高的系 ...

  3. PHP脚本设置及获取进程名

    今天来学习的是两个非常简单的函数,一个可以用来设置我们执行脚本时运行的进程名.而另一个就是简单的获取当前运行的进程名.这两个函数对于大量的脚本运行代码有很大的作用,比如我们需要 kill 掉某个进程时 ...

  4. linux新安装了php,但是使用mysqli连接数据库一直超时

    centos7+mysql5.5+php5.6+nginx mysql php nginx都安装完成,然后启动了,网站也运行, 但是php文件中使用mysqli_connect时一直超时,有时也报错, ...

  5. php_excel导出

    1.下载PHPExcel工具 2.解压后放置位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php. 3.Common.php代码 public functio ...

  6. 安装 MongoDb

    下面具体说下MongoDB安装之后的一些配置操作 [声明]我的安装路径是:C:\Program Files\MongoDB\Server\3.4 1. 创建数据库路径(data目录).日志路径(log ...

  7. 带你掌握Vue过滤器filters及时间戳转换

    摘要:Vue的filters过滤器是比较常见的一个知识点,下面我将结合时间戳转换的例子带你快速了解filters的用法. 本文分享自华为云社区<三分钟掌握Vue过滤器filters及时间戳转换& ...

  8. Shell系列(30)- 单分支if语句判断分区使用率

    需求 监控分区已用空间,超过80%,抛出警告 脚本 #!/bin/bash #给tets赋值用于接收参数,传递给if进行判断 #申明变量test并赋值,由于赋的值是系统变量的结果,所以得用$()引用 ...

  9. python 建站教程

    主端:安装nginx uwsgi django pymysql mysql安装mysql到http://repo.mysql.com/里面找 mysql57-community-release-el7 ...

  10. c++ 的学习 第二集函数的重载

    1. 规则 函数名相同参数个数不同.参数类型不同.参数顺序不同 2. 注意 返回值类型与函数重载无关 调用函数时,实参的隐式类型转换可能会产生二义性 返回值类型与函数重载无关 什么意思? 返回 ...