日期:2014-05-20 浏览次数:20916 次
先声明一下,说什么框架其实是为了吸引一下大家,哈哈,其实只是把自己在开发过程中的代码想办法的去整合在一起,让自己以及团队成员快速的尽量的少写很多代码。先整理出第一个版本,也欢迎更多的有志之士加入这个代码重构的框架中来,我相信通过我们大家的共同努力我们一定会写出优秀高效的代码,说一下自己后期的一些目标以及这个整合的框架代码里。无论我写得是否为好,请大家不要吐槽。
此框架预计完成的封装及重构的目标是:
1、 封装了Handler+Thread 【0.1版本已完成】
2、 封装HTTP请求【后续推出】
3、 对Sqlite 操作数据库的封装
4、 对一些常用控件如下拉刷新 pounpwindow等其他控件的一些整合【此部分有些是可以参考别人的】
5、........
下面看一下我0.1版本实现的对Handler+Thread的封装 源代码及示例代码下载地址面给出核心的代码
封装了一个ICallbackObject主要起中间桥梁作用
其中最主要的是HandlerUtil这个类 。故贴出核心代码
package com.coder.framework.handler; import java.io.Serializable; import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.coder.framework.model.ICallbackObject; import android.app.ProgressDialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.UserDictionary.Words; import android.view.View; /** * Handler + Thread 实现的一些封装工具类 * * @author coder * */ public class HandlerUtil { // Handler对象 private static final Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { ICallbackObject callbackObject = (ICallbackObject) msg.obj; ICallbackListener callbackListener = callbackObject .getCallbackListener(); ProgressDialog progressDialog = callbackObject.getProgressDialog(); View progressView = callbackObject.getProgressView(); if (null != progressDialog) { progressDialog.dismiss(); } if (null != progressView) { if (progressView.getVisibility() == View.VISIBLE) { progressView.setVisibility(View.INVISIBLE); } } if (null != callbackListener) { callbackListener.callBack(msg.what, callbackObject.getResult()); } }; }; /** * * @param taskId 执行的任务ID标识 * @param iCallbackObject ICallbackObject对象 */ public static <T> void execute(final int taskId, final ICallbackObject<T> iCallbackObject) { if (null != iCallbackObject.getProgressDialog()) { iCallbackObject.getProgressDialog().show(); } if (null != iCallbackObject.getProgressView()) { if (iCallbackObject.getProgressView().getVisibility() == View.INVISIBLE) { iCallbackObject.getProgressView().setVisibility(View.VISIBLE); } } new Thread() { public void run() { Message msg = handler.obtainMessage(); msg.what = taskId; T result = iCallbackObject.getGetDataListener().getData(taskId); //设置返回结果 iCallbackObject.setResult(result); msg.obj = iCallbackObject; handler.sendMessage(msg); } }.start(); } }
引用示例:
package com.coder.framework; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import com.coder.framework.R; import com.coder.framework.base.BaseActivity; import com.coder.framework.handler.ICallbackListener; import com.coder.framework.handler.IGetDataListener; import com.coder.framework.model.ICallbackObject; import com.coder.framework.util.ProgressDialogUtil; /** * 示例代码 * @author coder * */ public class CoderFrameworkDemo extends BaseActivity implements IGetDataListener<List<UserInfo>>, ICallbackListener<List<UserInfo>> { private View contentView; private Button btn_getData01, btn_getData02; private TextView tv_result01, tv_result02; private ICallbackObject callbackObject1, callbackObject2; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentLayout(R.layout.main); contentView = getLyContentView(); btn_getData01 = (Button) contentView.findViewById(R.id.btn_getdata01); btn_getData02 = (Button) contentView.findViewById(R.id.btn_getdata02); tv_result01 = (TextView) contentView.findViewById(R.id.tv_result01); tv_result02 = (TextView) contentView.findViewById(R.id.tv_result02); callbackObject1 = new ICallbackObject(this, this, getProgressView()); callbackObject2 = new ICallbackObject(this, this, ProgressDialogUtil.getProgressDialog(this, "正在加载数据")); btn_getData01.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { doAsync(1, callbackObject2); } }); btn_getData02.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { doAsync(2, callbackObject1); } }); } @Override public void callBack(int taskId, List<UserInfo> result) { switch (taskId) { case 1: StringBuilder sb=new StringBuilder(); for (UserInfo item : result) { Log.i("coder", item.toString()); sb.append(item.getUserName()); } tv_result01.setText(sb.toString()); break; case 2: { StringBuilder sb2=new StringBuilder(); for (UserInfo item : result) { Log.i("coder", item.toString()); sb2.append(item.getUserName()); } tv_result02.setText(sb2.toString()); break; } default: break; } } @Override public List<UserInfo> getData(int taskId) { try { Thread.sleep(5000); } catch (Exception e) { // TODO: handle exception } List<UserInfo> result = new ArrayList<UserInfo>(); switch (taskId) { case 1: { for (int i = 0; i < 4; i++) { result.add(new UserInfo("11111111" , i)); } break; } case 2: { for (int i = 0; i < 4; i++) { result.add(new UserInfo("2222222" , i)); } break; } default: break; } return result; } }实现的引用效果:
以上代码希望能给大家在开发过程中能带来些方便,至少不用再重复的去newThread new Hadler啦,哪怕是少写一行代码这也是有进步的,菜鸟路上一起加油,希望更多的人能加入这样的一个贡献中来。
最后附上源代码下载地址,感兴趣的人可以加入到这个计划中来,奉献你的源代码,让我们一起把这个开源计划做下去!以上代码我自知个人能力有限,有写得不好的地方请大家别吐槽,我们正在一步一步的成长!
项目 托管在google code,后期会放在github。
项目地址:http://code.google.com/p/coderframework/
API DOC文档:
有愿意加入到这个项目中来的,或者愿意分享自己代码的同志们都可以加我Q QQ:810417397
如需转载引用请注明出处:http://blog.csdn.net/jiahui524