介绍
介绍
OkHttp是 Android 开发界最受欢迎的网络编程的库
今天我们就来学习它的使用方法和技巧
教程
导入
添加依赖
打开 Gradle scripts -> build.gradle (Module: app)
在 android 里添加如下设定
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
在 dependencies 里添加如下依赖项目
implementation 'com.squareup.okhttp3:okhttp:3.14.2' implementation 'com.squareup.okio:okio:1.17.4'
点击右上角的 Sync Now 下载库
使用
完成 GET 请求
我们来写一段简单的代码来完成GET请求
OkHttpClient httpClient; Request request; Call call; Response response; try{ httpClient = new OkHttpClient(); request = new Request.Builder() .url("https://tongfu.net/api/user/logined/_loginUser") .get() .build(); call = httpClient.newCall(request); response = call.execute(); if(response.code() == 200){ System.out.println(response.body().string()); } } catch (IOException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); }
完成POST请求
我们来写一段简单的代码来模拟POST请求
表单提交
使用FormBody.Builder创建请求体,可以通过add方法一个一个地将POST数据传入进来,这种方式模拟的是网页表单提交的效果。
OkHttpClient httpClient; RequestBody body; Request request; Call call; Response response; try{ httpClient = new OkHttpClient(); body = new FormBody.Builder() .add("uid", "35") .add("oldPwd", "123456") .add("newPwd", "abcdef") .add("confirmPwd", "abcdef") .build(); request = new Request.Builder() .url("https://tongfu.net/api/user/logined/_passwd") .post(body) .build(); call = httpClient.newCall(request); response = call.execute(); if(response.code() == 200){ System.out.println(response.body().string()); } } catch (IOException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); }
JSON提交
使用RequestBody.create方法可以指定请求类型,这里福哥通过RequestBody.create提交了一段JSON数据到服务器上,这种方法模拟的是网页的AJAX请求的方式。
OkHttpClient httpClient; RequestBody body; Request request; Call call; Response response; JSONObject json; String jsonData; try{ httpClient = new OkHttpClient(); json = new JSONObject(); json.put("uid", 35); json.put("oldPwd", "123456"); json.put("newPwd", "abcdef"); json.put("confirmPwd", "abcdef"); jsonData = json.toString(); body = RequestBody.create(MediaType.parse("application/json"), jsonData); request = new Request.Builder() .url("https://tongfu.net/api/user/logined/_passwd") .post(body) .build(); call = httpClient.newCall(request); response = call.execute(); if(response.code() == 200){ System.out.println(response.body().string()); } } catch (IOException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); }
实现上传文件请求
写一段简单的代码模拟用户选择图片上传到服务器的操作,这里面需要有内存卡访问权限
OkHttpClient httpClient; RequestBody body; Request request; Call call; Response response; try{ httpClient = new OkHttpClient(); body = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("uid", "35") .addFormDataPart("file", "photo.jpg", RequestBody.create(MediaType.parse("image/jpeg"), new File("/mnt/sdcard/Pictures/photo.jpg") )) .build(); request = new Request.Builder() .url("https://tongfu.net/api/user/logined/_icon") .post(body) .build(); call = httpClient.newCall(request); response = call.execute(); if(response.code() == 200){ System.out.println(response.body().string()); } } catch (IOException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); }
注意:OkHttpClient 请求不能在主线程里进行,所以我们需要把这些逻辑放入 Thread 里去运行
总结
福哥今天将使用OkHttp工具来模拟HTTP协议的GET、POST请求的操作。当然,除了这两个请求方式外还有诸如:PUT、DELETE、HEAD等等方法,这个就留给大家自己探索吧!