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的过程,以及遇到的一些 ...
随机推荐
- jvm(四):垃圾回收
垃圾回收我们主要从以下三个方面进行描述 垃圾对象的判断 目前判断对象为垃圾对象有两种方法:引用计数法,可达性分析法,目前普遍是的是可达性分析法 可达性分析法的实现原理: 定义gcroot一直往下找,如 ...
- electron应用以管理员权限启动
最近在用electron开发PC桌面应用,其中有个需求就是整个应用以管理员权限启动.很头痛,各种google,baidu. 最后终于解决了,可以分为三个步骤,做个总结分享. 一.如果没有manifes ...
- css 中calc无效属性值问题
width:calc(50%-20px); 这样书写是无效的因为calc中计算的两个因子同运算符号之间必须存在空格:
- PHP While 循环
PHP 循环 - While 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. PHP 循环 在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行.我们可以在代码中使用循 ...
- Linux(八)用户管理
8.1 基本介绍 Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账户,然后以这个账户身份进入系统. Linux的用户需要至少要属于一个组. 8 ...
- Tinyhttpd for Windows
TinyHTTPd forWindows 前言 TinyHTTPd是一个开源的简易学习型的HTTP服务器,项目主页在:http://tinyhttpd.sourceforge.net/,源代码下载:h ...
- Dynamics CRM2016 使用web api来创建注释时的注意事项
在使用wei api 创建注释的时候,有个字段需要注意下,就是下面图中的objectid字段,虽然它是个查找字段,但不能像普通的查找字段property@odata.bind来赋值 上代码,注意看倒数 ...
- (译)快速指南:用UIViewPropertyAnimator做动画
翻译自:QUICK GUIDE: ANIMATIONS WITH UIVIEWPROPERTYANIMATOR 译者:Haley_Wong iOS 10 带来了一大票有意思的新特性,像 UIViewP ...
- 【Java二十周年】Delphi转行java的一些小感触
本文纯属一届小码农对java使用过程的体验感触 目录: 初遇java编程语言 与java的擦肩 深入java 跨平台性 开源支持 web的支撑 初遇java编程语言 刚上大学的时候,完全是个电脑盲.刚 ...
- Linux 高性能服务器编程——socket选项
socket选项函数 功能:用来读取和设置socket文件描述符属性的方法 函数: #include <sys/scoket.h> int getsockopt ( int sockfd, ...