Android(安卓)App 中简易的网络数据处理方法
16lz
2021-01-25
前言:由于工作需要,前段时间都在忙着写 php,这段时间又来写 Android 了,我就是这么个兴趣广泛不安分的人,哈哈。 在做电商应用的时候,App 通常要发送大量的网络请求,服务器返回数据通常都是 Json 或字符串格式的。新手在做开发的时候,习惯于在 activity 或 fragment 里面直接处理与它相关的网络请求(发送请求、处理服务器返回的数据),这样会导致一些 activity 和 fragment 代码臃肿杂乱,因为这时的 activity 即是 view 又是 controller 又是 model,显然这样不利于维护。当然很多人都有自己的解决方法,现在最火热的就是 mvp 模式了,网上有一大堆介绍它的文章,所以我就不重复了。这里我说下我的想法,欢迎各位大神指教。 下面这张图是我处理网络请求的一个简易流程: (1). 当 View 需要发出网络请求的时候,它要创建一个 ParamPacket 对象,把请求地址、参数、所在 view 的 handler 对象引用等信息都设置到这个对象里面,然后 调用 RequestPoster 的 postNetRequest() 方法,并把这个参数传递过去; (2). 然后 RequestPoster 从它接收到的 ParamPacket 对象中取出相关参数,向服务器发送请求; (3). 服务器返回 App 需要的数据包 data1; (4). 把服务器返回的数据包 data1 发送给 ConvertCenter 进行处理; (5). ConvertCenter 返回处理好后的数据 data2 给 RequestPoster;
ConvertCenter 会这样处理数据
然后在 MainTab1 的 Handler 中这样处理
点击这里下载源码!
(6). RequestPoster 根据 ParamPacket 对象中的 handler ,调用 handler.sendMessage(data2) 把 data2 返回给 View 。
Button button2 = (Button)getActivity().findViewById(R.id.activity_main_tab1_btn_testnet);button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { OkHttpClientManager.Param[] paramArray = new OkHttpClientManager.Param[]{ new OkHttpClientManager.Param("lat", ""), new OkHttpClientManager.Param("lng", "") }; ParamPacket paramPacket = new ParamPacket(UrlList.MAINTAB1_TEST_URL, paramArray, mHandler, HandlerMsgType.MAINTAB1_NET_TEST); RequestPoster.postNetRequest(paramPacket); }});
ConvertCenter 会这样处理数据
public static HashMap<String, Object> convertData(int messageType, String dataString) { switch (messageType) { case HandlerMsgType.MAINTAB1_NET_TEST: return MAINTAB1_NET_TEST(dataString); } return null;}public static HashMap<String, Object> MAINTAB1_NET_TEST(String dataString) { HashMap<String, Object> retMap = new HashMap(); retMap.put(ConvertRetKey.MAINTAB1_NET_TEST, dataString); return retMap;}
然后在 MainTab1 的 Handler 中这样处理
private void initHandler() { mHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case HandlerMsgType.MAINTAB1_NET_TEST : { Map<String , Object> ret = (Map<String , Object>)msg.obj; String retString = (String) ret.get(ConvertRetKey.MAINTAB1_NET_TEST); mTestTv.setText(retString); break; } } return false; } });}这样所有的数据就对应起来了,当然在ConvertRetKey 这个类中,定义字符串常量的时候,要见名知义、知来源,最好加些注释说明清楚。此外,项目中的 OkHttpClientManager 类对 okhttp 进行了简单的封装,还用到了 Gson,还有之前集成第三方登录和分享时导入的一些包和测试代码,这些都不在本章讨论的范围之内,请忽略。项目中的测试地址,是我在局域网上搭的一个服务器地址,如果你下载了源码进行测试,要把地址换掉哦。如有遗漏或写得不好的地方,欢迎大家指导。
点击这里下载源码!
更多相关文章
- 万字长文带你了解最常用的开源 Squid 代理服务器
- Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- Android基于HTTP网络编程总结浅析
- Android性能优化篇:从布局角度进行优化
- Android@Kotlin 在Android(安卓)studio 中配置Kotlin
- 面试技术汇总
- [置顶] Android上传文件到Web服务器,PHP接收文件(一)
- Android集成微信支付功能