日期:2014-05-20 浏览次数:21088 次
先声明一下,说什么框架其实是为了吸引一下大家,哈哈,其实只是把自己在开发过程中的代码想办法的去整合在一起,让自己以及团队成员快速的尽量的少写很多代码。先整理出第一个版本,也欢迎更多的有志之士加入这个代码重构的框架中来,我相信通过我们大家的共同努力我们一定会写出优秀高效的代码,说一下自己后期的一些目标以及这个整合的框架代码里。无论我写得是否为好,请大家不要吐槽。
此框架预计完成的封装及重构的目标是:
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