当前位置:   article > 正文

Android --- 网络请求

Android --- 网络请求

通常在 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"/>

OkHttp

添加依赖

在build.gradle.kts中添加依赖

  1. dependencies {
  2. // 添加okhttp的依赖
  3. implementation("com.squareup.okhttp3:okhttp:4.11.0")
  4. }

 get请求

  1. public void toLearnOKhttp(View view) {
  2. // 创建一个 OKhttp 客户端
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 创建一个 http 请求
  5. Request request = new Request.Builder().url("https://reqres.in/api/users").get().build();
  6. // Call 是一个即将准备好被执行的请求
  7. Call call = okHttpClient.newCall(request);
  8. // 执行请求,并定义回调函数
  9. // 请求成功后数据封装在response的body里面
  10. call.enqueue(new Callback() {
  11. @Override
  12. public void onFailure(@NonNull Call call, @NonNull IOException e) {
  13. Log.e("okhttp-----失败","okhttp失败");
  14. }
  15. @Override
  16. public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
  17. if(response.isSuccessful()){
  18. String data = response.body().string();
  19. Log.i("okhttp-----成功",data);
  20. }
  21. }
  22. });
  23. }

post请求

POST请求将参数放在请求的主体中,不会直接显示在URL中。

  1. public void toLearnOKhttpPost(View view){
  2. // 创建一个 OKhttp 客户端
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 创建一个 http 请求
  5. RequestBody body = new FormBody.Builder().add("username","akshfalwhfaina").add("password","123456").build();
  6. Request request = new Request.Builder().url("https://www.wanandroid.com/user/login").post(body).build();
  7. Call call = okHttpClient.newCall(request);
  8. call.enqueue(new Callback() {
  9. @Override
  10. public void onFailure(@NonNull Call call, @NonNull IOException e) {
  11. Log.e("okhttp-----post失败",e.toString());
  12. }
  13. @Override
  14. public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
  15. Log.e("okhttp-----post成功",response.toString());
  16. }
  17. });
  18. }

Json数据解析

json对象:花括号开头和结尾,中间是键值对形式————”属性”:属性值””

json数组:中括号里放置 json 数组,里面是多个json对象或者数字等

JSONObject

利用 JSONObject 解析
1.创建 JSONObject 对象,传入满足 json 格式的字符串
2.根据 json数据的key键值 获取其中的数据,是什么类型的数据就写getxx()
3.getJSONObject("xxx") 获取JSONObject对象
4.getJSONArray("xxx") 获取json数组
5.jsonArray.getJSONObject(i) 获取数组中的第 i 个json对象

请求返回的数据如下:

  1. JSONObject jsonObject = new JSONObject(data);
  2. Log.i("okhttp-----成功","总共数量"+jsonObject.getString("total"));
  3. // data 里面是 json 数组,数组里面放的是多个 json 对象
  4. JSONArray jsonArray = jsonObject.getJSONArray("data");
  5. for (int i = 0; i < jsonArray.length(); i++) {
  6. JSONObject jo = jsonArray.getJSONObject(i); // 获取数组中的第 i 个对象
  7. String text1 = jo.getString("email");
  8. Log.i("okhttp-----成功--邮箱","邮箱"+text1);
  9. }
  10. } catch (JSONException e) {
  11. throw new RuntimeException(e);
  12. }

Gson解析

用第三方工具来解析json数据

添加依赖

  1. // 1.添加 gson 依赖
  2. implementation("com.google.code.gson:gson:2.8.9")
  • 创建 Bean 对象(数据对象),注意,元素和返回的数据的元素要一一对应。
  • toJson:将 bean 对象转换成 json 字符串
  • fromJson:将 json 字符串转换成 bean 对象
  1. package com.example.androidstudiostudy.data;
  2. import java.util.List;
  3. // 一个json 的数据对象(来自于GET返回的 json 字符串)
  4. public class OneJsonBean {
  5. private int page;
  6. private int per_page;
  7. private int total;
  8. private int total_pages;
  9. private List<DataBean> data;
  10. @Override
  11. public String toString() {
  12. return "OneJsonBean对象{" +
  13. "page=" + page +
  14. ", per_page=" + per_page +
  15. ", total=" + total +
  16. ", total_pages=" + total_pages +
  17. ", data=" + data +
  18. '}';
  19. }
  20. }
  1. package com.example.androidstudiostudy.data;
  2. // 此时的 DataBean 是 GET 返回的json字符串中 data的json对象
  3. public class DataBean {
  4. private int id;
  5. private String email;
  6. private String first_name;
  7. private String last_name;
  8. private String avatar;
  9. public DataBean(int id, String email, String first_name, String last_name, String avatar) {
  10. this.id = id;
  11. this.email = email;
  12. this.first_name = first_name;
  13. this.last_name = last_name;
  14. this.avatar = avatar;
  15. }
  16. public int getId() {
  17. return id;
  18. }
  19. public String getEmail() {
  20. return email;
  21. }
  22. public String getFirst_name() {
  23. return first_name;
  24. }
  25. public String getLast_name() {
  26. return last_name;
  27. }
  28. public String getAvatar() {
  29. return avatar;
  30. }
  31. @Override
  32. public String toString() {
  33. return "DataBean{" +
  34. "id=" + id +
  35. ", email='" + email + '\'' +
  36. ", first_name='" + first_name + '\'' +
  37. ", last_name='" + last_name + '\'' +
  38. ", avatar='" + avatar + '\'' +
  39. '}';
  40. }
  41. }
  1. // Gson解析json数据
  2. Gson gson = new Gson();
  3. OneJsonBean oneJsonBean = gson.fromJson(data, OneJsonBean.class);
  4. Log.e("okhttp-----成功--数据转换成对象",oneJsonBean.toString());

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/496973
推荐阅读
相关标签
  

闽ICP备14008679号