当前位置:   article > 正文

1.Android篇——利用okhttp请求后台接口封装工具类方便调用_安卓调用后台接口

安卓调用后台接口

问题:

android端如何发起请求调用后端数据接口,达到交互的效果。

注:有时候我们需要和后台有会话的时候,需要携带cookie信息,这个时候就需要getCookie方法来携带cookie信息了,这个时候就需要在登录的时候提前保存到本地,这个我们在下一篇会有详细描述。

1:首先我们需要在build.gradle中导入相关okhttp的依赖

  1. implementation 'com.squareup.okhttp3:okhttp:3.10.0' //okhttp
  2. implementation 'com.alibaba:fastjson:1.2.56' //阿里json处理

2:接下来就可以使用okhttp来调用了,代码我这边简单封装了一下,内容如下:

(1).这个是请求的工具类

  1. package com.zjxf.utils;
  2. import android.content.Context;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.zjxf.cache.CacheKeys;
  5. import com.zjxf.common.SysConst;
  6. import io.netty.util.internal.StringUtil;
  7. import okhttp3.CacheControl;
  8. import okhttp3.Callback;
  9. import okhttp3.MediaType;
  10. import okhttp3.OkHttpClient;
  11. import okhttp3.Request;
  12. import okhttp3.RequestBody;
  13. /**
  14. * created with IntelliJ IDEA
  15. *
  16. * @author: create by limu
  17. * Date: 2019/11/12
  18. * Time:9:39
  19. */
  20. public class RequestUtils {
  21. public static final MediaType FORM_CONTENT_TYPE = MediaType.parse("application/json;charset=utf-8");
  22. private static final byte[] LOCKER = new byte[0];
  23. private static RequestUtils mInstance;
  24. /**
  25. * post请求不传递参数
  26. *
  27. * @param url 请求地址
  28. * @param callback 执行函数
  29. */
  30. public void postEmpty(Context context, String url, final Callback callback) {
  31. OkHttpClient client = new OkHttpClient();
  32. Request request = new Request.Builder()
  33. .url(splicingUrl(url)).post(okhttp3.internal.Util.EMPTY_REQUEST)
  34. .addHeader("Cookie", getCookie(context))
  35. .cacheControl(CacheControl.FORCE_NETWORK)
  36. .build();
  37. client.newCall(request).enqueue(callback);
  38. }
  39. /**
  40. * get请求不传递参数
  41. *
  42. * @param url 请求地址
  43. * @param callback 执行函数
  44. */
  45. public void getEmpty(Context context, String url, final Callback callback) {
  46. OkHttpClient client = new OkHttpClient();
  47. Request request = new Request.Builder()
  48. .url(url).get()
  49. .addHeader("Cookie", getCookie(context))
  50. .cacheControl(CacheControl.FORCE_NETWORK)
  51. .build();
  52. client.newCall(request).enqueue(callback);
  53. }
  54. /**
  55. * 发送json数据
  56. *
  57. * @param url 请求地址
  58. * @param paramJson 发送json数据
  59. * @param callback 执行函数
  60. */
  61. public void postJson(String url, JSONObject paramJson, final Callback callback) {
  62. OkHttpClient client = new OkHttpClient();
  63. RequestBody requestBody = OkHttpUtils.setJSONBody(paramJson.toJSONString());
  64. Request request = new Request.Builder()
  65. .url(splicingUrl(url)).post(requestBody)
  66. .cacheControl(CacheControl.FORCE_NETWORK)
  67. .build();
  68. client.newCall(request).enqueue(callback);
  69. }
  70. /**
  71. * 发送表单数据
  72. *
  73. * @param url 请求地址
  74. * @param paramJson 请求参数
  75. * @param callback 执行函数
  76. */
  77. public void postForm(Context context, String url, JSONObject paramJson, final Callback callback) {
  78. OkHttpClient client = new OkHttpClient();
  79. RequestBody requestBody = OkHttpUtils.setFormBody(paramJson);
  80. Request request = new Request.Builder()
  81. .url(splicingUrl(url)).post(requestBody)
  82. .addHeader("Cookie", getCookie(context))
  83. .cacheControl(CacheControl.FORCE_NETWORK)
  84. .build();
  85. client.newCall(request).enqueue(callback);
  86. }
  87. /**
  88. * 发送表单数据
  89. *
  90. * @param url 请求地址
  91. * @param paramJson 请求参数
  92. * @param callback 执行函数
  93. */
  94. public void postFormByLogin(Context context, String url, JSONObject paramJson, final Callback callback) {
  95. OkHttpClient client = new OkHttpClient();
  96. RequestBody requestBody = OkHttpUtils.setFormBody(paramJson);
  97. Request request = new Request.Builder()
  98. .url(splicingUrl(url)).post(requestBody)
  99. .cacheControl(CacheControl.FORCE_NETWORK)
  100. .build();
  101. client.newCall(request).enqueue(callback);
  102. }
  103. /**
  104. * 单例模式获取RequestUtils
  105. *
  106. * @return RequestUtils
  107. */
  108. public static RequestUtils getInstance() {
  109. if (mInstance == null) {
  110. synchronized (LOCKER) {
  111. if (mInstance == null) {
  112. mInstance = new RequestUtils();
  113. }
  114. }
  115. }
  116. return mInstance;
  117. }
  118. /**
  119. * 组合请求地址
  120. *
  121. * @param url 映射地址
  122. * @return 请求地址
  123. */
  124. private String splicingUrl(String url) {
  125. return SysConst.REMOTE_URL + url;
  126. }
  127. /**
  128. * 获取登录信息
  129. *
  130. * @param context 上下文对象
  131. * @return String
  132. */
  133. public String getCookie(Context context) {
  134. String sessionId = SharedPrefUtils.getInstance().getStrBykey(CacheKeys.LOGIN_SESSION_Id, StringUtil.EMPTY_STRING);
  135. if (sessionId.equals(StringUtil.EMPTY_STRING)) {
  136. return SysConst.EMPTY;
  137. } else {
  138. return sessionId;
  139. }
  140. }
  141. }

(2).CacheKeys是对登录的cookie做缓存的key的一个常量 

  1. package com.zjxf.cache;
  2. /**
  3. * created with IntelliJ IDEA
  4. *
  5. * @author: create by limu
  6. * Date: 2020/4/9
  7. * Time:10:31
  8. */
  9. public class CacheKeys {
  10. public final static String LOGIN_USERNAME = "login_user_name:";
  11. public final static String THIS_SCHOOL_NAME = "this_school_name:";
  12. public final static String LOGIN_SESSION_Id = "login_session_id:";
  13. }

 (3).SysConst是对系统常量类的一个管理 

  1. package com.zjxf.common;
  2. /**
  3. * created with IntelliJ IDEA
  4. * <p>
  5. * 系统常量类
  6. * <p>
  7. * Date: 2020/2/12
  8. *
  9. * @author: create by limu
  10. * Time:16:23
  11. */
  12. public class SysConst {
  13. public static final String REMOTE_URL = "http://39.100.143.199:8631"; //远程请求地址 后缀不加斜杆
  14. }

3.用法

  1. JSONObject paramJson = new JSONObject();
  2. paramJson.put("bankId", bankId);
  3. RequestUtils.getInstance().postForm(AnswerActivity.this, ResourceManagerUrlConstants.PSY_APP_FIND_BY_TOPICS, paramJson, new Callback() {
  4. @Override
  5. public void onFailure(Call call, IOException e) {
  6. runOnUiThread(() -> ToastUtils.showToastUnLine(AnswerActivity.this));
  7. }
  8. @Override
  9. public void onResponse(Call call, Response response) throws IOException {
  10. String resultData = ResultUtils.getResultData(response, AnswerActivity.this);
  11. }
  12. });

以上是发送form表单数据时候使用的,工具类中也提供发生json数据的方法,也提供不发送数据的方法,大家有什么疑问可以在博客下方留言。

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

闽ICP备14008679号