android实现观察者模式没有效果,没有达到预期的效果,不知如何解决
来源:互联网 发布:游戏下载软件 编辑:程序博客网 时间:2024/05/30 23:04
1,问题描述:后台服务上传数据,通知栏中显示进度,上传完成后更新当前界面的状体为已经上传。想着使用观察者模式的方式来进行监听上传的状态,当上传完成后,通知观察者已经上传,然后在当前界面的update()方法中更新界面的状体。但是测试结果为数据能上传,但当前界面的update()方法没有执行。下面为详细的内容
2,点击QurestionCollect 中的listview的Item的”上传“按钮,启动服务进行后台数据上传,通知栏显示上传进度,上传完成后更新界面的上传按钮为 “已经上传”
3,具体的实现方法:
3.1 被观察者继承Observable ,这里显示主要代码
public class ResultDetails extends Observable implements Serializable {/** * */private static final long serialVersionUID = 1L;........省略部分代码//通知上传完成public void notifyUpload(int position){this.position = position;setChanged();notifyObservers();}
3.2 观察者实现Observer,主要代码
public abstract class QurestionCollect extends BaseActivity implements Observer {//.........省略部分代码@Overridepublic void update(Observable observable, Object data) { //观察到上传完成后更新界面的状态// TODO Auto-generated method stubif (observable instanceof ResultDetails) {ResultDetails rsd = (ResultDetails) observable;rslist.set(rsd.getPosition(), rsd);adapter.setList(rslist);adapter.notifyDataSetChanged();}}class TaskFinistedAdapter extends BaseAdapter {//......省略部分代码public View getView(final int position, View convertView,ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;//省略部分代码...................// 上传holder.upload.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubhandleUplaod(rsd, position);}});convertView.setTag(holder);return convertView;}public void setList(ArrayList<ResultDetails> list) {this.list = list;}// 上传处理private void handleUplaod(ResultDetails rsd, int position) {if (!isNetworkAvailable()) {setNetwork();return;}rsd.addObserver(QurestionCollect.this); // 添加观察者Intent intent = new Intent(QurestionCollect.this,UploadService.class);intent.setAction(Constact.Upload_Service);intent.putExtra("rsd", rsd);intent.putExtra("position", position);intent.putExtra("common", false);startService(intent);}}}
3.3 在服务中上传完成后通知观察者
// 后台线程上传处理class UploadThread extends AsyncTask<Void, Integer, RspResultAndDetails> {private ResultDetails rsd;private int position;private AppException exception;public UploadThread(ResultDetails rsds, int position) {this.rsd = rsds;this.position = position;}@Overrideprotected RspResultAndDetails doInBackground(Void... params) {}@Overrideprotected void onProgressUpdate(Integer... values) {}@Overrideprotected void onPostExecute(RspResultAndDetails result) {// TODO Auto-generated method stubif (result != null) {//省略部分代码............//上传成功,更新状态//rsd.notifyUpload(position);}}}
4,整个流程就是这样,不知道为什么QurestionCollect 中的Update()方法没有起作用。因为项目比较急,所有换成了广播的方式来完成,当上传完成后,发送广播,界面接收到广播,更新界面状态。
5,希望对这方面了解的大侠帮个忙解答一下 !!!!!
- android实现观察者模式没有效果,没有达到预期的效果,不知如何解决
- STM32IO口没有达到预期效果解决方法
- 开发日志:万恶的struts2标签内置格式,导致table、DIV设置没有达到预期效果
- 不能达到预期效果的代码--残废!~
- [求助] 这个简单的程序为什么没有预期效果呢?
- android editText实现没有边框,没有背景的效果
- view 没有达到自己预料的效果 找不见
- req.flash('error', '') 没有效果如何解决
- 解决android 7.0 popwindow的showAsDropDown没有效果问题
- ListView setOnItemClickListener没有效果的解决
- selector drawable没有效果解决
- Android关于setExitTransition() 没有效果的问题
- mysql 拼接字符串已达到预期效果
- 修改过的webservice程序,发布后测试没有达到效果
- AutoComplete没有效果的解决方案
- 这个是没有效果的
- 解决[UIColor colorWithRed: green: blue: alpha:] 没有效果的问题
- 修改浏览器浏览模式没有效果问题
- 搜索AD账户信息
- 汉字编码
- 来自极客标签10款最新设计素材-系列十
- CentOS release 5.4 (Final) 配置PPTP VPN服务器(初步)
- 当SQL Server jobs失败时自动发送邮件
- android实现观察者模式没有效果,没有达到预期的效果,不知如何解决
- StringUtils 工具类的常用方法
- Sed:常用操作
- 由图层判断数据源类型
- 服务器虚拟化
- Median of Two Sorted Arrays
- win64系统下vs2008安装boost_1_51_0
- cocos2d-x中CCTableView的使用
- 开启sa用户