购彩大厅(一)——异步获取彩种当前销售期信息
第四步:异步获取彩种当前销售期信息
①创建Thread实例执行耗时工作
②创建AsyncTask实例制定耗时工作
③分析存在问题:
④在BaseView中设置AsyncTask的子类,用于完成与服务器交换的耗时工作
⑤编写executeProxy用于替代execute,在该方法中增加用于判断当前网络的功能
⑥在onPostExecute方法中调用界面更新的方法
|
1、HallView.java /**
* 获取当前销售期信息
*/
public void getCurrentIssueInfo(){
// 优化3:使用已有AsyncTask类进行数据的获取,将其丢到BaseView中
new MyHttpAsyncTask<Integer>() {
@Override
protected Message doInBackground(Integer... params) {
// 1、获取业务的对象(用工厂类来获取)
CommonInfoEngine infoEngine = EngineFactory.getEngineImplInstance(CommonInfoEngine.class);
// 2、执行相应的方法
Message message = infoEngine.getCurrentIssueInfo(params[0]);
return message;
}
}.executeProxy(ConstantValue.SSQ);
// 2、优化后,在每次调用start()方法时就进行网络的判断
// new MyThread().start();
// 1、判断网络类型(有一个问题:每次都需要些这么一大串代码)
// if (NetUtil.checkNetwork(context)) {// 有网络连接
// new MyThread().start();
// } else {// 没有网络连接,提示用户没有网络
// PromptManager.showNoNetWork(context);
// }
}
/**
* 子线程去获取数据,获取当前销售期信息
*
* @author hacket
*/
// private class MyThread extends Thread {
// @Override
// public void run() {
// }
// @Override
// public synchronized void start() {
// if (NetUtil.checkNetwork(context)) {// 有网络连接
// super.start();
// } else {// 没有网络连接,提示用户没有网络
// PromptManager.showNoNetWork(context);
// }
// }
// }
|
2、BaseView.java /**
* 访问网络
*
* @author hacket
* @param <Params>
*/
// 对于不同的请求,Params参数不一样;返回为服务器返回的xml,可以确定为Message
public abstract class MyHttpAsyncTask<Params> extends AsyncTask<Params, Void, Message> {
// 1、由于doInBackground是具体的请求服务,所以要让子类实现,所以将该类做成abstract
// 2、为了在其execute的时候,可以增加网络状态的判断,所以考虑复写execute()方法
// 3、而查看源码后可以发现,execute()方法为final,不能被复写
// 4、所以我们可以将其源码拷贝过来,自己定义一个方法,增加网络判断的功能,调用时就调用这个增强的方法
/**
* @param params
* @return
*/
public final AsyncTask<Params, Void, Message> executeProxy(Params... params) {
if (NetUtil.checkNetwork(context)) {// 有网络
return execute(params);
} else {// 没有网络
PromptManager.showNoNetWork(context);
}
return null;
}
|
|
|