Android okhttp使用的方法
发布时间 - 2026-01-10 22:59:35 点击率:次简介
OKHttp是一个十分常用的网络请求框架了,用于android中请求网络。

除了OKHttp,如今Android中主流的网络请求框架有:
- Android-Async-Http
- Volley
- OkHttp
- Retrofit
依赖库导入
在build.gradle 添加如下依赖
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
get请求
/**
* 同步Get同求
*
* @param url url
* @return
*/
public String syncGet(String url) {
String result = "";
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.get()
.build();
final Call call = okHttpClient.newCall(request);
//4.同步调用会阻塞主线程,这边在子线程进行
new Thread(new Runnable() {
@Override
public void run() {
try {
//同步调用,返回Response,会抛出IO异常
Response response = call.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return result;
}
/**
* 异步Get同求
*
* @param url url
* @return
*/
public void nonSyncGet(String url, Callback responseCallback) {
String result = null;
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.创建Request对象
Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call =okHttpClient.newCall(request);
call.enqueue(responseCallback);
}
Post请求
在OkHttp中用Post方法把键值对数据传送到服务器,使用FormBody.Builder创建请求的参数键值,构建一个RequestBody对象,
- key-value:提交键值对
- String:字符串类型
- Form:表单数据
- Stream:流类型
- File:文件类型
/**
* 同步Post同求
*
* @param url url
* @return
*/
public String syncPost(String url) {
String result = null;
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
FormBody.Builder mBuild = new FormBody.Builder();
mBuild.add("name", "tony")
.add("age", "21");
RequestBody requestBody= mBuild.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 异步Post同求
*
* @param url url
* @return
*/
public void nonSyncPost(String url, Callback responseCallback) {
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
FormBody.Builder mBuild = new FormBody.Builder();
mBuild.add("name", "tony")
.add("age", "21");
RequestBody requestBody= mBuild.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
try {
okHttpClient.newCall(request).enqueue(responseCallback);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Post json
*
* @param url url
* @return
*/
public String postJson(String url, Callback responseCallback) {
String result = null;
String jsonStr = "json";
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType, jsonStr);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* Post String
*
* @param url url
* @return
*/
public String postString(String url, Callback responseCallback) {
String result = null;
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"),
"{username:tony;password:123456}");
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
post表单请求
/**
* Post 表单
*
* @param url url
* @return
*/
public String postForm(String url, Callback responseCallback) {
String result = null;
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBody.Builder mBuild = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("username", "tony")
.addFormDataPart("password", "123456");
RequestBody requestBody= mBuild.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
result = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
post 上传文件
public void uploadFile(String url) {
ArrayList<String> filelist = getFileList();
//1.创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBody.Builder multipartBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (int i = 0; i < filelist.size(); i++) {
String path = filelist.get(i);
File file = new File(path);
String fileMimeType = getMimeType(file);
//这里获取文件类型,方法自己定义
MediaType mediaType = MediaType.parse(fileMimeType);
RequestBody fileBody = RequestBody.create(mediaType, file);
multipartBody.addFormDataPart("file" + i, file.getName(), fileBody);
}
RequestBody requestBody = multipartBody.build();
Request requestPostFile = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
response = okHttpClient.newCall(requestPostFile).execute();
if (response.isSuccessful()) {
} else {
throw new IOException("Unexpected code " + response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
参考博文
https://www.jianshu.com/p/bb57bc65e4ce
https://www.jianshu.com/p/b1cf0b574e74
# Android
# okhttp使用
# Android Studio OkHttpClient使用教程详解
# android 使用okhttp可能引发OOM的一个点
# Android使用OkHttp发送post请求
# android 使用OkHttp上传多张图片的实现代码
# Android使用OkHttp进行网络同步异步操作
# Android中okhttp3使用详解
# 表单
# 键值
# 是一个
# 抛出
# 上传文件
# 博文
# 构建一个
# final
# call
# newCall
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
北京专业网站制作设计师招聘,北京白云观官方网站?
JavaScript如何实现音频处理_Web Audio API如何工作?
如何在搬瓦工VPS快速搭建网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
C#如何调用原生C++ COM对象详解
Laravel怎么在Blade中安全地输出原始HTML内容
微信小程序 canvas开发实例及注意事项
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Bootstrap整体框架之JavaScript插件架构
Java遍历集合的三种方式
如何在企业微信快速生成手机电脑官网?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何快速搭建安全的FTP站点?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Laravel Fortify是什么,和Jetstream有什么关系
如何在IIS中新建站点并配置端口与物理路径?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
如何快速搭建高效服务器建站系统?
EditPlus中的正则表达式 实战(2)
Android GridView 滑动条设置一直显示状态(推荐)
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel如何创建自定义Artisan命令?(代码示例)
油猴 教程,油猴搜脚本为什么会网页无法显示?
Swift中switch语句区间和元组模式匹配
微信推文制作网站有哪些,怎么做微信推文,急?
在centOS 7安装mysql 5.7的详细教程
微信小程序 闭包写法详细介绍
Java类加载基本过程详细介绍
WEB开发之注册页面验证码倒计时代码的实现
iOS UIView常见属性方法小结
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
想要更高端的建设网站,这些原则一定要坚持!
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
详解jQuery停止动画——stop()方法的使用
中国移动官方网站首页入口 中国移动官网网页登录
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
新三国志曹操传主线渭水交兵攻略
JavaScript Ajax实现异步通信
如何在阿里云虚拟服务器快速搭建网站?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
电商网站制作价格怎么算,网上拍卖流程以及规则?

