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方法区别  电商网站制作价格怎么算,网上拍卖流程以及规则?