android智能终端SDK

移动支付产品接入文档


Android okHttp网络请求之Get/Post请求

<h5>Android okHttp网络请求之Get/Post请求</h5> <p>参考链接:[<a href="https://www.cnblogs.com/whoislcj/p/5526431.html](https://www.cnblogs.com/whoislcj/p/5526431.html">https://www.cnblogs.com/whoislcj/p/5526431.html](https://www.cnblogs.com/whoislcj/p/5526431.html</a> &quot;<a href="https://www.cnblogs.com/whoislcj/p/5526431.html&quot">https://www.cnblogs.com/whoislcj/p/5526431.html&quot</a>;)</p> <ol> <li>导入依赖 <pre><code class="language-java">implementation 'com.squareup.okhttp3:okhttp:3.10.0' // 网络请求的jar包</code></pre></li> <li>添加权限 用于访问网络,网络定位需要上网 &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;</li> <li> <p>添加RequestManager工具类</p> <pre><code class="language-java">/** * @author :xie * @date :Created in 2021/11/23 14:12 * @function: * @description: * @modified By: * @version: $ */ public class RequestManager { /********************************************全局属性解说****************************************/ private static final MediaType MEDIA_TYPE_JSON = MediaType.parse(&amp;quot;application/x-www-form-urlencoded; charset=utf-8&amp;quot;);//mdiatype 这个需要和服务端保持一致 private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse(&amp;quot;text/x-markdown; charset=utf-8&amp;quot;);//mdiatype 这个需要和服务端保持一致 private static final String TAG = RequestManager.class.getSimpleName(); private static final String BASE_URL = &amp;quot;http://xxx.com/openapi&amp;quot;;//请求接口根地址 private static volatile RequestManager mInstance;//单利引用 public static final int TYPE_GET = 0;//get请求 public static final int TYPE_POST_JSON = 1;//post请求参数为json public static final int TYPE_POST_FORM = 2;//post请求参数为表单 private OkHttpClient mOkHttpClient;//okHttpClient 实例 private Handler okHttpHandler;//全局处理子线程和M主线程通信 /*********************************************调用*******************************************/ /** * 功能: 构造函数 * 说明: 初始化RequestManager * * @param: context * @return: * @author: xie * @date: 2021/11/23 */ public RequestManager(Context context) { //初始化OkHttpClient mOkHttpClient = new OkHttpClient().newBuilder() .connectTimeout(10, TimeUnit.SECONDS)//设置超时时间 .readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间 .writeTimeout(10, TimeUnit.SECONDS)//设置写入超时时间 .build(); //初始化Handler okHttpHandler = new Handler(context.getMainLooper()); } /** * 功能: 获取单例引用 * 说明: 获取单利引用 这里用到了双重检查锁实现单例 * * @param: context * @return: com.zkc.ranging.utils.RequestManager * @author: xie * @date: 2021/11/23 */ public static RequestManager getInstance(Context context) { RequestManager inst = mInstance; if (inst == null) { synchronized (RequestManager.class) { inst = mInstance; if (inst == null) { inst = new RequestManager(context.getApplicationContext()); mInstance = inst; } } } return inst; } /*****************************************实现okHttp同步请求*************************************/ /** * 功能: okHttp同步请求统一入口 * 说明: * * @param: actionUrl 接口地址 * @param: requestType 请求类型 * @param: paramsMap 请求参数 * @return: void * @author: xie * @date: 2021/11/23 */ public void requestSyn(String actionUrl, int requestType, HashMap&amp;lt;String, String&amp;gt; paramsMap) { switch (requestType) { case TYPE_GET: requestGetBySyn(actionUrl, paramsMap); break; case TYPE_POST_JSON: requestPostBySyn(actionUrl, paramsMap); break; case TYPE_POST_FORM: requestPostBySynWithForm(actionUrl, paramsMap); break; } } /*****************************************实现okHttp异步请求*************************************/ /** * 功能: okHttp异步请求统一入口 * 说明: * * @param &amp;lt;T&amp;gt; 数据泛型 * @param: actionUrl 接口地址 * @param: requestType 请求类型 * @param: paramsMap 请求参数 * @param: callBack 请求返回数据回调 * @return: okhttp3.Call * @author: xie * @date: 2021/11/23 */ public &amp;lt;T&amp;gt; Call requestAsyn(String actionUrl, int requestType, HashMap&amp;lt;String, String&amp;gt; paramsMap, ReqCallBack&amp;lt;T&amp;gt; callBack) { Call call = null; switch (requestType) { case TYPE_GET: call = requestGetByAsyn(actionUrl, paramsMap, callBack); break; case TYPE_POST_JSON: call = requestPostByAsyn(actionUrl, paramsMap, callBack); break; case TYPE_POST_FORM: call = requestPostByAsynWithForm(actionUrl, paramsMap, callBack); break; } return call; } /***********************************************************************************************/ /** * okHttp get同步请求 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 */ private void requestGetBySyn(String actionUrl, HashMap&amp;lt;String, String&amp;gt; paramsMap) { StringBuilder tempParams = new StringBuilder(); try { //处理参数 int pos = 0; for (String key : paramsMap.keySet()) { if (pos &amp;gt; 0) { tempParams.append(&amp;quot;&amp;amp;&amp;quot;); } //对参数进行URLEncoder tempParams.append(String.format(&amp;quot;%s=%s&amp;quot;, key, URLEncoder.encode(paramsMap.get(key), &amp;quot;utf-8&amp;quot;))); pos++; } //补全请求地址 String requestUrl = String.format(&amp;quot;%s/%s?%s&amp;quot;, BASE_URL, actionUrl, tempParams.toString()); //创建一个请求 Request request = addHeaders().url(requestUrl).build(); //创建一个Call final Call call = mOkHttpClient.newCall(request); //执行请求 final Response response = call.execute(); response.body().string(); } catch (Exception e) { Log.e(TAG, e.toString()); } } /** * okHttp post同步请求 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 */ private void requestPostBySyn(String actionUrl, HashMap&amp;lt;String, String&amp;gt; paramsMap) { try { //处理参数 StringBuilder tempParams = new StringBuilder(); int pos = 0; for (String key : paramsMap.keySet()) { if (pos &amp;gt; 0) { tempParams.append(&amp;quot;&amp;amp;&amp;quot;); } tempParams.append(String.format(&amp;quot;%s=%s&amp;quot;, key, URLEncoder.encode(paramsMap.get(key), &amp;quot;utf-8&amp;quot;))); pos++; } //补全请求地址 String requestUrl = String.format(&amp;quot;%s/%s&amp;quot;, BASE_URL, actionUrl); //生成参数 String params = tempParams.toString(); //创建一个请求实体对象 RequestBody RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, params); //创建一个请求 final Request request = addHeaders().url(requestUrl).post(body).build(); //创建一个Call final Call call = mOkHttpClient.newCall(request); //执行请求 Response response = call.execute(); //请求执行成功 if (response.isSuccessful()) { //获取返回数据 可以是String,bytes ,byteStream Log.e(TAG, &amp;quot;response -----&amp;gt;&amp;quot; + response.body().string()); } } catch (Exception e) { Log.e(TAG, e.toString()); } } /** * okHttp post同步请求表单提交 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 */ private void requestPostBySynWithForm(String actionUrl, HashMap&amp;lt;String, String&amp;gt; paramsMap) { try { //创建一个FormBody.Builder FormBody.Builder builder = new FormBody.Builder(); for (String key : paramsMap.keySet()) { //追加表单信息 builder.add(key, paramsMap.get(key)); } //生成表单实体对象 RequestBody formBody = builder.build(); //补全请求地址 String requestUrl = String.format(&amp;quot;%s/%s&amp;quot;, BASE_URL, actionUrl); //创建一个请求 final Request request = addHeaders().url(requestUrl).post(formBody).build(); //创建一个Call final Call call = mOkHttpClient.newCall(request); //执行请求 Response response = call.execute(); if (response.isSuccessful()) { Log.e(TAG, &amp;quot;response -----&amp;gt;&amp;quot; + response.body().string()); } } catch (Exception e) { Log.e(TAG, e.toString()); } } /***********************************************************************************************/ /** * okHttp get异步请求 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 * @param callBack 请求返回数据回调 * @param &amp;lt;T&amp;gt; 数据泛型 * @return */ private &amp;lt;T&amp;gt; Call requestGetByAsyn(String actionUrl, HashMap&amp;lt;String, String&amp;gt; paramsMap, final ReqCallBack&amp;lt;T&amp;gt; callBack) { StringBuilder tempParams = new StringBuilder(); try { int pos = 0; for (String key : paramsMap.keySet()) { if (pos &amp;gt; 0) { tempParams.append(&amp;quot;&amp;amp;&amp;quot;); } tempParams.append(String.format(&amp;quot;%s=%s&amp;quot;, key, URLEncoder.encode(paramsMap.get(key), &amp;quot;utf-8&amp;quot;))); pos++; } String requestUrl = String.format(&amp;quot;%s/%s?%s&amp;quot;, BASE_URL, actionUrl, tempParams.toString()); final Request request = addHeaders().url(requestUrl).build(); final Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { failedCallBack(&amp;quot;访问失败&amp;quot;, callBack); Log.e(TAG, e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String string = response.body().string(); Log.e(TAG, &amp;quot;response -----&amp;gt;&amp;quot; + string); successCallBack((T) string, callBack); } else { failedCallBack(&amp;quot;服务器错误&amp;quot;, callBack); } } }); return call; } catch (Exception e) { Log.e(TAG, e.toString()); } return null; } /** * okHttp post异步请求 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 * @param callBack 请求返回数据回调 * @param &amp;lt;T&amp;gt; 数据泛型 * @return */ private &amp;lt;T&amp;gt; Call requestPostByAsyn(String actionUrl, HashMap&amp;lt;String, String&amp;gt; paramsMap, final ReqCallBack&amp;lt;T&amp;gt; callBack) { try { StringBuilder tempParams = new StringBuilder(); int pos = 0; for (String key : paramsMap.keySet()) { if (pos &amp;gt; 0) { tempParams.append(&amp;quot;&amp;amp;&amp;quot;); } tempParams.append(String.format(&amp;quot;%s=%s&amp;quot;, key, URLEncoder.encode(paramsMap.get(key), &amp;quot;utf-8&amp;quot;))); pos++; } String params = tempParams.toString(); RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, params); String requestUrl = String.format(&amp;quot;%s/%s&amp;quot;, BASE_URL, actionUrl); final Request request = addHeaders().url(requestUrl).post(body).build(); final Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { failedCallBack(&amp;quot;访问失败&amp;quot;, callBack); Log.e(TAG, e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String string = response.body().string(); Log.e(TAG, &amp;quot;response -----&amp;gt;&amp;quot; + string); successCallBack((T) string, callBack); } else { failedCallBack(&amp;quot;服务器错误&amp;quot;, callBack); } } }); return call; } catch (Exception e) { Log.e(TAG, e.toString()); } return null; } /** * okHttp post异步请求表单提交 * * @param actionUrl 接口地址 * @param paramsMap 请求参数 * @param callBack 请求返回数据回调 * @param &amp;lt;T&amp;gt; 数据泛型 * @return */ private &amp;lt;T&amp;gt; Call requestPostByAsynWithForm(String actionUrl, HashMap&amp;lt;String, String&amp;gt; paramsMap, final ReqCallBack&amp;lt;T&amp;gt; callBack) { try { FormBody.Builder builder = new FormBody.Builder(); for (String key : paramsMap.keySet()) { builder.add(key, paramsMap.get(key)); } RequestBody formBody = builder.build(); String requestUrl = String.format(&amp;quot;%s/%s&amp;quot;, BASE_URL, actionUrl); final Request request = addHeaders().url(requestUrl).post(formBody).build(); final Call call = mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { failedCallBack(&amp;quot;访问失败&amp;quot;, callBack); Log.e(TAG, e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String string = response.body().string(); Log.e(TAG, &amp;quot;response -----&amp;gt;&amp;quot; + string); successCallBack((T) string, callBack); } else { failedCallBack(&amp;quot;服务器错误&amp;quot;, callBack); } } }); return call; } catch (Exception e) { Log.e(TAG, e.toString()); } return null; } /****************************************统一为请求添加头信息*************************************/ private Request.Builder addHeaders() { Request.Builder builder = new Request.Builder() .addHeader(&amp;quot;Connection&amp;quot;, &amp;quot;keep-alive&amp;quot;) .addHeader(&amp;quot;platform&amp;quot;, &amp;quot;2&amp;quot;) .addHeader(&amp;quot;phoneModel&amp;quot;, Build.MODEL) .addHeader(&amp;quot;systemVersion&amp;quot;, Build.VERSION.RELEASE) .addHeader(&amp;quot;appVersion&amp;quot;, &amp;quot;3.2.0&amp;quot;); return builder; } /****************************************成功与失败 回调处理**************************************/ /** * 统一同意处理成功信息 * * @param result * @param callBack * @param &amp;lt;T&amp;gt; */ private &amp;lt;T&amp;gt; void successCallBack(final T result, final ReqCallBack&amp;lt;T&amp;gt; callBack) { okHttpHandler.post(new Runnable() { @Override public void run() { if (callBack != null) { callBack.onReqSuccess(result); } } }); } /** * 统一处理失败信息 * * @param errorMsg * @param callBack * @param &amp;lt;T&amp;gt; */ private &amp;lt;T&amp;gt; void failedCallBack(final String errorMsg, final ReqCallBack&amp;lt;T&amp;gt; callBack) { okHttpHandler.post(new Runnable() { @Override public void run() { if (callBack != null) { callBack.onReqFailed(errorMsg); } } }); } }</code></pre> </li> <li>使用工具类发送请求</li> </ol>

页面列表

ITEM_HTML