版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
AsyCallbackListener.java
public class AsyCallbackListener
{
public void run(Object result)
{
}
public void error(Exception ex)
{
}
}
AsyExecuteListener.java
public class AsyExecuteListener
{
public Object run() throws Exception
{
return null;
}
}
AsyHelper.java
@SuppressLint("HandlerLeak")
public class AsyHelper
{
private final int Error = -1;
private final int Success = 0;
private Thread thread;
private AsyCallbackListener callback;
private AsyExecuteListener exelistener;
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
if (msg.what == Success)
{
Object result = msg.obj;
callback.run(result);
} else
{
callback.error((Exception) msg.obj);
}
}
};
public void execute(AsyExecuteListener listener, AsyCallbackListener callback)
{
this.exelistener = listener;
this.callback = callback;
Runnable run = new Runnable()
{
@Override
public void run()
{
try
{
Object result = exelistener.run();
Message msg = new Message();
msg.what = Success;
msg.obj = result;
handler.sendMessage(msg);
} catch (Exception ex)
{
Message msg = new Message();
msg.what = Error;
msg.obj = ex;
handler.sendMessage(msg);
}
}
};
thread = new Thread(run);
thread.start();
}
public static void create(AsyExecuteListener listener, AsyCallbackListener callback)
{
AsyHelper asyHelper = new AsyHelper();
asyHelper.execute(listener, callback);
}
}
BaseActivity.java
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView();// 设置布局
initControls();// 初始化控件
setListener();// 设置控件监听
loadParams();// 加载传递的参数
}
protected void setContentView() {}
protected void initControls() {}
protected void setListener() {}
protected void loadParams() {}
public void showLoading() {}
public void closeLoading() {}
public void runThreadAction() {
AsyHelper.create(new AsyExecuteListener() {
public Object run() throws Exception {
return runThreadActionExceute();
}
},
new AsyCallbackListener() {
public void run(Object result) {
runThreadActionSuccess(result);
}
public void error(Exception ex) {
runThreadActionError(ex);
}
});
}
protected Object runThreadActionExceute() {
showLoading();
return null;
}
protected void runThreadActionSuccess(Object result) {
closeLoading();
}
protected void runThreadActionError(Exception ex) {
closeLoading();
ToastUtil.showToast(BaseActivity.this, ex.getMessage(), 3000);
}
public void runThreadAction(String actionName) {
final String name = actionName;
AsyHelper.create(new AsyExecuteListener() {
public Object run() throws Exception {
return runThreadActionExceute(name);
}
;
},
new AsyCallbackListener() {
public void run(Object result) {
runThreadActionSuccess(name, result);
}
public void error(Exception ex) {
runThreadActionError(name, ex);
}
});
}
protected Object runThreadActionExceute(String actionName) {
showLoading();
return null;
}
protected void runThreadActionSuccess(String actionName, Object result) {
closeLoading();
}
protected void runThreadActionError(String actionName, Exception ex) {
closeLoading();
ToastUtil.showToast(BaseActivity.this, ex.getMessage(), 3000);
}
protected <T> T find(int resourceId) {
return (T) findViewById(resourceId);
}
MainActivity.java
public class MainActivityextends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
runThreadAction(); //调用
}
@Override
protected void setContentView() {
super.setContentView();
setContentView(R.layout.main);
}
@Override
protected void initControls() {
super.initControls();
}
@Override
protected void loadParams() {
super.loadParams();
}
@Override
protected void setListener() {
super.setListener();
}
@Override
public void runThreadAction() {
super.runThreadAction();
}
@Override
protected Object runThreadActionExceute() {
super.runThreadActionExceute();
//这里执行网络请求
//返回请求回来的response -》runThreadActionSuccess()中
return null;
}
@Override
protected void runThreadActionSuccess( Object result) {
super.runThreadActionSuccess( result);
//请求成功,处理数据
}
@Override
protected void runThreadActionError(, Exception ex) {
super.runThreadActionError( ex);
//请求失败
}