赞
踩
通常在 Android 中进行网络连接一般使用 Scoket 和HTTP,HTTP 请求方式比 Scoket 多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式(系统自带的)。但是在 Android 5.0 的时候 Google 就不推荐使用 HttpClient 了,到了 Android 6.0 (api 23) SDK,不再提供 org.apache.http.* (只保留几个类), 因此,设置 android SDK 的编译版本为23时,且使用了 httpClient 相关类的库项目:如 android-async-http 等等,会出现有一些类找不到的错误。
开始网络请求之前应该在清单文件中添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
添加依赖
在build.gradle.kts中添加依赖
- dependencies {
- // 添加okhttp的依赖
- implementation("com.squareup.okhttp3:okhttp:4.11.0")
- }
- public void toLearnOKhttp(View view) {
- // 创建一个 OKhttp 客户端
- OkHttpClient okHttpClient = new OkHttpClient();
- // 创建一个 http 请求
- Request request = new Request.Builder().url("https://reqres.in/api/users").get().build();
- // Call 是一个即将准备好被执行的请求
- Call call = okHttpClient.newCall(request);
- // 执行请求,并定义回调函数
- // 请求成功后数据封装在response的body里面
- call.enqueue(new Callback() {
- @Override
- public void onFailure(@NonNull Call call, @NonNull IOException e) {
- Log.e("okhttp-----失败","okhttp失败");
- }
-
- @Override
- public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
- if(response.isSuccessful()){
- String data = response.body().string();
- Log.i("okhttp-----成功",data);
-
- }
- }
- });
- }
POST请求将参数放在请求的主体中,不会直接显示在URL中。
- public void toLearnOKhttpPost(View view){
- // 创建一个 OKhttp 客户端
- OkHttpClient okHttpClient = new OkHttpClient();
- // 创建一个 http 请求
- RequestBody body = new FormBody.Builder().add("username","akshfalwhfaina").add("password","123456").build();
- Request request = new Request.Builder().url("https://www.wanandroid.com/user/login").post(body).build();
- Call call = okHttpClient.newCall(request);
- call.enqueue(new Callback() {
- @Override
- public void onFailure(@NonNull Call call, @NonNull IOException e) {
- Log.e("okhttp-----post失败",e.toString());
-
- }
-
- @Override
- public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
- Log.e("okhttp-----post成功",response.toString());
- }
- });
- }
json对象:花括号开头和结尾,中间是键值对形式————”属性”:属性值””
json数组:中括号里放置 json 数组,里面是多个json对象或者数字等
利用 JSONObject 解析
1.创建 JSONObject 对象,传入满足 json 格式的字符串
2.根据 json数据的key键值 获取其中的数据,是什么类型的数据就写getxx()
3.getJSONObject("xxx") 获取JSONObject对象
4.getJSONArray("xxx") 获取json数组
5.jsonArray.getJSONObject(i) 获取数组中的第 i 个json对象
请求返回的数据如下:
- JSONObject jsonObject = new JSONObject(data);
- Log.i("okhttp-----成功","总共数量"+jsonObject.getString("total"));
- // data 里面是 json 数组,数组里面放的是多个 json 对象
- JSONArray jsonArray = jsonObject.getJSONArray("data");
- for (int i = 0; i < jsonArray.length(); i++) {
- JSONObject jo = jsonArray.getJSONObject(i); // 获取数组中的第 i 个对象
- String text1 = jo.getString("email");
- Log.i("okhttp-----成功--邮箱","邮箱"+text1);
- }
- } catch (JSONException e) {
- throw new RuntimeException(e);
- }
用第三方工具来解析json数据
添加依赖
- // 1.添加 gson 依赖
- implementation("com.google.code.gson:gson:2.8.9")
- package com.example.androidstudiostudy.data;
-
- import java.util.List;
-
- // 一个json 的数据对象(来自于GET返回的 json 字符串)
- public class OneJsonBean {
- private int page;
- private int per_page;
- private int total;
- private int total_pages;
- private List<DataBean> data;
-
- @Override
- public String toString() {
- return "OneJsonBean对象{" +
- "page=" + page +
- ", per_page=" + per_page +
- ", total=" + total +
- ", total_pages=" + total_pages +
- ", data=" + data +
- '}';
- }
- }
-
- package com.example.androidstudiostudy.data;
-
- // 此时的 DataBean 是 GET 返回的json字符串中 data的json对象
- public class DataBean {
- private int id;
- private String email;
- private String first_name;
- private String last_name;
- private String avatar;
-
- public DataBean(int id, String email, String first_name, String last_name, String avatar) {
- this.id = id;
- this.email = email;
- this.first_name = first_name;
- this.last_name = last_name;
- this.avatar = avatar;
- }
-
- public int getId() {
- return id;
- }
-
- public String getEmail() {
- return email;
- }
-
- public String getFirst_name() {
- return first_name;
- }
-
- public String getLast_name() {
- return last_name;
- }
-
- public String getAvatar() {
- return avatar;
- }
-
- @Override
- public String toString() {
- return "DataBean{" +
- "id=" + id +
- ", email='" + email + '\'' +
- ", first_name='" + first_name + '\'' +
- ", last_name='" + last_name + '\'' +
- ", avatar='" + avatar + '\'' +
- '}';
- }
- }
- // Gson解析json数据
- Gson gson = new Gson();
- OneJsonBean oneJsonBean = gson.fromJson(data, OneJsonBean.class);
- Log.e("okhttp-----成功--数据转换成对象",oneJsonBean.toString());
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。