当前位置:   article > 正文

AsyncHttpClient的数据请求使用的封装_asynchttpclient 封装

asynchttpclient 封装

        近期干了一件非常蛋疼的事情,就是在整个项目的数据请求中添加参数,实现起来倒是简单,但是项目中的涉及到的网络请求没有封装,导致要改的话就要所有的网络请求以及接口都是要改动的,真心是无语。没办法,当时刚接手这个项目的时候就想过要封装一个网络请求的框架,但是又觉得工作量太大,而且自己擅自改动后还要再走测试流程也就想想就放弃了。没想到到今天还是要动工,哎没办法只能加班加点。

     先给大家展现下原来的接口请求是什么样的:

          

  http://192.168.2.157:9090/getAdConfigureList?body={"params":{"terminalCode":"868403025191716|1|6.0|20170605154050","merchantId":"1","version":"25"}}
   这是项目中的原来的接口,现在的需求是这样的:
  1. http://192.168.2.157:9090/getAdConfigureList?
  2. monitor={"userId":"8765009300000000065","token":"1545471319684"}
  3. &body={"params":{"terminalCode":"868403025191716|1|6.0|20170605154050","merchantId":"1","version":"25"}}

  我们项目额请求都是用的post,仔细分析下就会看见现在的需求的请求参数就是在原来的基础上相当于又加上一个body,那应该怎么实现呢?

  其实很简单:

     

  1. private void postGetPaymentChannel() {
  2. String str = BaseActivity.urlString + "getPaymentChannel";
  3. Map<String, Object> mapStart = new HashMap<String, Object>();
  4. mapStart.put("token", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_TOKEN) + "");
  5. mapStart.put("userId", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_USER_ID)+ "");
  6. JSONObject mapStartJson = new JSONObject(mapStart);
  7. RequestParams params = new RequestParams();
  8. params.put("body", mapStartJson.toString());
  9. AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
  10. asyncHttpClient.post(str, params, new AsyncHttpResponseHandler() {
  11. @Override
  12. public void onFailure(Throwable error, String content) {
  13. super.onFailure(error, content);
  14. }
  15. @Override
  16. public void onStart() {
  17. super.onStart();
  18. }
  19. @Override
  20. public void onSuccess(String content) {}
  21. });
  22. }
  原来的方法里面只放了body,那么现在要求放入monitor,可以这样做:

  

  1. private void postGetPaymentChannel() {
  2. String str = BaseActivity.urlString + "getPaymentChannel";
  3. Map<String, Object> mapStart = new HashMap<String, Object>();
  4. mapStart.put("token", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_TOKEN) + "");
  5. mapStart.put("userId", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_USER_ID)+ "");
  6. JSONObject mapStartJson = new JSONObject(mapStart);
  7. RequestParams params = new RequestParams();
  8. params.put("body", mapStartJson.toString());
  9. Map<String, Object> mapEnd = new HashMap<String, Object>();
  10. mapEnd.put("token", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_TOKEN) + "");
  11. mapEnd.put("userId", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_USER_ID)+ "");
  12. JSONObject jsonlAST = new JSONObject(mapEnd);
  13. params.put("monitor", jsonlAST.toString());
  14. AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
  15. asyncHttpClient.post(str, params, new AsyncHttpResponseHandler() {
  16. @Override
  17. public void onFailure(Throwable error, String content) {
  18. super.onFailure(error, content);
  19. }
  20. @Override
  21. public void onStart() {
  22. super.onStart();
  23. }
  24. @Override
  25. public void onSuccess(String content) {}
  26. });
  27. }
     其实值改一个接口的话这样做确实是很简单的,但是项目中这么多的接口都要修改怎么办呢?

    这一次没办法,只能一个个找到一个个改,单这一次必须吸取教训,抽出来,然后下次需要加参数的时候就可以只动一个地方就ok了,怎么抽呢?

   

  1. public class HttpClientPostUtils {
  2. private static String TAG = "postData";
  3. /**
  4. *
  5. * @param mapHead
  6. * body里面的参数
  7. * @param mapEnd
  8. * 后面追加的一个body
  9. * @param tag
  10. * 打印日志用的标志
  11. * @param headUrl
  12. * 请求的地址头
  13. * @param internetResultListener
  14. * 请求的接口回调
  15. */
  16. public static void postForDatas(Map<String, Object> mapHead, String tag, String headUrl,
  17. final InternetResultListener internetResultListener) {
  18. String urlStr = BaseActivity.urlString + headUrl;
  19. RequestParams params = new RequestParams();
  20. Map<String, Object> paramsMap = new HashMap<String, Object>();
  21. paramsMap.put("params", mapHead);
  22. JSONObject json = new JSONObject(paramsMap);
  23. params.put("body", json.toString());
  24. Map<String, Object> mapEnd = new HashMap<String, Object>();
  25. mapEnd.put("token", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_TOKEN) + "");
  26. mapEnd.put("userId", BaseActivity.baseParams().get(BaseActivity.PRE_KEY_USER_ID) + "");
  27. JSONObject jsonlAST = new JSONObject(mapEnd);
  28. params.put("monitor", jsonlAST.toString());
  29. Logger.i(TAG, tag + urlStr + "?" + params.toString());
  30. AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
  31. asyncHttpClient.post(urlStr, params, new AsyncHttpResponseHandler() {
  32. @Override
  33. public void onStart() {
  34. super.onStart();
  35. internetResultListener.onPostStart();
  36. }
  37. @Override
  38. public void onSuccess(int statusCode, String content) {
  39. super.onSuccess(statusCode, content);
  40. if (200 == statusCode) {
  41. internetResultListener.onPostSuccess(statusCode, content);
  42. } else {
  43. Throwable error = new Throwable("失败了");
  44. internetResultListener.onPostFailure(error, "状态码 = " + statusCode + "content = " + content);
  45. }
  46. }
  47. @Override
  48. public void onFailure(Throwable error, String content) {
  49. super.onFailure(error, content);
  50. internetResultListener.onPostFailure(error, content);
  51. }
  52. });
  53. }
  54. }

  封装以后只需要传入map集合以及请求地址和回调的listener即可。

  其中回调的listener:

  1. public interface InternetResultListener {
  2. void onPostStart();
  3. void onPostFailure(Throwable error, String content);
  4. void onPostSuccess(int statusCode, String content);
  5. }

那么现在想要进行网络请求的时候只需要调用这个方法就行:

  1. public void Check_login_Post(String userId, String token, final int type) {
  2. Map<String, Object> map = new HashMap<String, Object>();
  3. map.put("userId", userId);
  4. map.put("token", token);
  5. String headUrl = "seachToken";
  6. HttpClientPostUtils.postForDatas(map, "检查是被登录接口", headUrl, new InternetResultListener() {
  7. @Override
  8. public void onPostSuccess(int statusCode, String content) {
  9. //成功的回调
  10. }
  11. @Override
  12. public void onPostStart() {
  13. //开始的回调
  14. }
  15. @Override
  16. public void onPostFailure(Throwable error, String content) {
  17. //失败的回调
  18. }
  19. });
  20. }

  而且封装的接口请求有统一的日志打印,看起来也很整洁不会很凌乱,只要进行日志过滤就会知道哪一步进行了那些接口的请求。当然如果项目之前就这样封装的话,我今天的工作量就小多了,但是没办法,只能一个个去改了,已经做好加班的准备了!


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

闽ICP备14008679号