全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android okhttp使用的方法

简介

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 


相关文章: C++如何使用std::optional?(处理可选值)  如何用PHP快速搭建CMS系统?  长沙做网站要多少钱,长沙国安网络怎么样?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站org新手必看:2024最新搭建流程与模板选择技巧  Swift中switch语句区间和元组模式匹配  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  建设网站制作价格,怎样建立自己的公司网站?  c++怎么用jemalloc c++替换默认内存分配器【性能】  济南网站制作的价格,历城一职专官方网站?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  C#怎么创建控制台应用 C# Console App项目创建方法  香港服务器建站指南:免备案优势与SEO优化技巧全解析  免费ppt制作网站,有没有值得推荐的免费PPT网站?  如何在IIS服务器上快速部署高效网站?  小型网站制作HTML,*游戏网站怎么搭建?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  深圳网站制作的公司有哪些,dido官方网站?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  小程序网站制作需要准备什么资料,如何制作小程序?  建站主机空间推荐 高性价比配置与快速部署方案解析  一键网站制作软件,义乌购一件代发流程?  如何在香港免费服务器上快速搭建网站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  香港服务器选型指南:免备案配置与高效建站方案解析  如何在企业微信快速生成手机电脑官网?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  网站制作公司,橙子建站是合法的吗?  成都网站制作报价公司,成都工业用气开户费用?  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星在线客服如何快速接入解答?  网站按钮制作软件,如何实现网页中按钮的自动点击?  临沂网站制作企业,临沂第三中学官方网站?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  贸易公司网站制作流程,出口贸易网站设计怎么做?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何选购建站域名与空间?自助平台全解析  如何在万网主机上快速搭建网站?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何快速搭建高效可靠的建站解决方案?  如何做网站制作流程,*游戏网站怎么搭建?  宝塔建站无法访问?如何排查配置与端口问题?  c# 服务器GC和工作站GC的区别和设置  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  建站之星会员如何解锁更多建站功能?  c# Task.ConfigureAwait(true) 在什么场景下是必须的 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。