Android项目-高考作文项目架构(二)
1, 普通的http json请求 请看下面架构草图:
这样就抽象出了其他Activity可能需要的Http Json请求的功能. 只要其他Activity有Http Json请求的需求都可以继承BaseActivity. 这样就统一了该功能的请求模式, 而不必为每个Activity单独做这样的功能. 维护性也强.
2, API详解 :
①public void onPrepare()
在UI线程执行, 该方法主要是用来在任务执行前做的一些操作 : 如显示加载提示; 判断网络连接等.
②public Object shouldExecute(HttpParam params)
在子线程中执行 , 该方法主要是用来判断这个请求有没有必要执行下去. 应用场景: 判断该请求的数据是否在本地或者数据库中, 如果在则不需要请求网络, 执行从本地查询即可, 最后把数据返回出去, 这样也就减少了网络请求.
③public Object handleJsonData(String json) 在子线程中执行, 该方法主要用来处理返回的json数据. 然后把处理后的数据返回.
④public void onFinalResult(Object content) 在主线程中执行, 该方法主要用来, 把数据渲染到前台界面.
⑤public void onFailed(int type, String msg)
在主线程中执行, 该方法用来处理 请求失败的情况.
3 , 回调接口 :
我们需要把共性和特性区别开来, 把共性都统一处理了 . 而特性是可能个别子类Activity有不同的需求(比如有的Activity需要显示加载提示,有的不需要, ). 所以我们把这些功能抽象成接口, 共前台的Activity进行回调 . 如果没有特别的地方,则在前台Activity不重写(overriding)这些接口方法即可 . 这样就保证了功能灵活性.
这些回调方法我统一抽取到了一个接口里:
public interface ISingleCallback { public void onError(int taskFlag,int type, String msg); public Object searchCache(int taskFlag,HttpParam params); public Object parseJson(int taskFlag,String json); public void onFinalData(int taskFlag,Object result); }
把这些接口方法分别放到②API详解即可.
4 , BaseActivity中完整的http json方法代码如下
<strong><span style="color:#ff0000;">protected void sendRequest(final int taskFlag, HttpParam params, final boolean isNeedDialog) {</span></strong> if (TaskController.getInstance().exist(taskFlag)) { ToastUtil.showShortToast(getApplicationContext(), R.string.task_executing); return; } new TaskHttp(taskFlag, new HttpCallback() { @Override public void onPrepare() { if (isNeedDialog) { if (loadingDialog == null) { loadingDialog = new LoadingDialog(BaseActivity.this); } showLoadTip(); } } @Override public Object shouldExecute(HttpParam params) { return searchCache(taskFlag, params); } @Override public Object handleJsonData(String json) { try { return parseJson(taskFlag, json); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public void onFinalResult(Object content) { onFinalData(taskFlag, content); } @Override public void onFailed(int type, String msg) { onError(taskFlag, type, msg); } }).execute(params); }
5, 其他请求:
以上的介绍都是请求http, 但是我们还可能有其他请求, 比如单个数据库查询请求. 这时候我们使用上面一套功能就可能不太合适了. 其实有了上面的思想, 这个很好实现, 第一, 内置一个匿名内部类(AsyncTask), 第二, 通过回调(Interface)把数据传回给前台Activity(Front Activity)进行处理. 代码如下:
protected void sendBackgroudTask(final int taskFlag, final Object params) { new AsyncTask<Void, Void, Object>() { @Override protected Object doInBackground(Void... arg0) { return backgroudTask(taskFlag, params); } protected void onPostExecute(Object result) { onDataBack(taskFlag, result); } }.execute(); }
Android项目-高考作文项目架构(二)的更多相关文章
- Android项目-高考作文项目架构(三)
上一篇我们讲到了, Http Json的功能的抽取. 如果我们请求的是一个列表的数据呢? 我们使用那个功能就不是很好. 因为一个列表, 还有很多其他功能(比如每个listView都需要setAdap ...
- Android项目-高考作文功能简介(一)
前言 : 开发安卓也已2年多了近3年了, 在自己刚入行的时候就有自己独立开发一个App的想法. 后来自己做了<<高考作文>>这一App. 后面续续断断的维护者. 也因为功能简 ...
- Android项目-高考作文-使用ORMLite抽象公共的Dao层
1, 定义统一的Dao接口 public interface IDao<T> { public abstract T getSingleById(int id); public abstr ...
- Android项目-高考作文-抽象BaseAdapter
1, 在使用baseAdapter的时候,总是有需要重复的代码如: @Override public int getCount() { return list.size(); } @Override ...
- Android项目-高考作文-AsyncTask的不足
1, AsyncTask的不足. 从android4.0开始, 后台只允许一个AsyncTask执行, 如果当前的AsyncTask没有执行完毕, 那么当前的请求一直处于等待状态. 直到上一个执行完毕 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- (转载)Android项目实战(三十二):圆角对话框Dialog
Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...
- 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 实际项目开发中可能碰到项目名称写错了或者需要修改,而且包名可能也想要修改,那么如何操作呢. 本文是在Android Studio3. ...
- eclipse再见,android studio 新手入门教程(二)项目的导入
上一篇博客介绍了AS的一些常用设置方法,当工具调教妥当后,自然就要开始项目的开发啦.从零开始新建一个项目,这个简单,不必多说,这篇博客会分享我从旧平台eclipse导入项目到AS的过程,以及遇到的一些 ...
随机推荐
- Python从入门到实践 学习笔记(二)元祖686gffs
列表是可以修改的,而不可变的列表被称为元组 . 定义 * 用圆括号来标识.定义元组后,使用索引来访问其元素,就像访问列表元素一样 修改变量 * 不能修改元组的元素,但可以给存储元组的变量赋值 修改元素 ...
- idea Library XXXXXXXX has broken classes paths
点fix 然后全部 全部按- 删掉 一开始以为会影响很大 后来发现他地址错了都导不进 要是真要用到的时候也没用 还是要maven单独导进来
- angularjs+ionic的app端分页和条件
做app项目积分商城的商品列表需要分页显示 实现: ionic滚动条:ion-scroll 用于创建一个可滚动的容器. 附:菜鸟教程:http://www.runoob.com/ionic/ionic ...
- 整理spring定时器corn表达式
1.结构 corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 2.各字段的含义 字段 允许值 允许的特殊字符 秒 0~59 - * / 分 0~59 - * / ...
- 59. Spiral Matrix II(中等,同54题)
Given an integer \(n\), generate a square matrix filled with elements from 1 to \(n^2\) in spiral or ...
- OpenSuSE Linux下安装Oracle10g的步骤
OpenSuSE Linux下安装Oracle10g的步骤: --root用户 --1.vi etc/profile 添加脚本: if [ \$USER = "oracle" ]; ...
- 深度解读GoogleNet之Inception V1
GoogleNet设计的目的 GoogleNet设计的初衷是为了提高在网络里面的计算资源的利用率. Motivation 网络越大,意味着网络的参数较多,尤其当数据集很小的时候,网络更容易发生过拟合. ...
- proc文件系统探索 之 以数字命名的目录
在proc根目录下,以数字命名的目录表示当前一个运行的进程,目录名即为进程的pid.其内的目录和文件给出了一些关于该进程的信息. niutao@niutao-desktop:/proc/6584$ l ...
- linux TCP头部的构造的简单分析
TCP的头部的构造是在函数tcp_transmit_skb()中进行的 函数片段如下: /* Build TCP header and checksum it. */ th = tcp_hdr(skb ...
- solr界面
1.1 界面功能介绍 1.1.1 Analysis