Android开发之使用观察者模式结合推送实现订单自动刷新
老套路:先上效果图:请看第二个订单状态
说下思路:订单状态改变是后台改变了,然后通过三方推送订单数据到手机,手机端通过拿到推送的数据进行自动刷新订单状态,这里面用到了Java设计模式中的:观察者模式。
接收推送的哪个类就是被观察者,接收到推送订单数据就会通过观察者进行数据的更新
被观察者:代码都是Kotlin写的
package com.xiayiye.takeout.utilsimport android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import cn.jpush.android.api.JPushInterface
import org.json.JSONObject/** Copyright (c) 2020, smuyyh@gmail.com All Rights Reserved.* # #* # _oo0oo_ #* # o8888888o #* # 88" . "88 #* # (| -_- |) #* # 0\ = /0 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永无BUG #* # #*//*** @author 下一页5(轻飞扬)* 创建时间:2020/3/7 13:20* 个人小站:http://yhsh.wap.ai(已挂)* 最新小站:http://www.iyhsh.icoc.in* 联系作者:企鹅 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 项目名称:XiaYiYeTakeOut* 文件包名:com.xiayiye.takeout.utils* 文件说明:自定义推送消息的类*/
class TakeOutReceiver : BroadcastReceiver() {override fun onReceive(p0: Context?, p1: Intent?) {val message = p1?.extras?.getString(JPushInterface.EXTRA_MESSAGE)val pushKeyAndValue = p1?.extras?.getString(JPushInterface.EXTRA_EXTRA)message?.let {Log.e("打印推送TakeOutReceiver", message)}pushKeyAndValue?.let {Log.e("打印推送TakeOutReceiver", pushKeyAndValue)
// 通过观察者模式更新订单状态OrderChangeFunction.instance.changeOrderStatus(pushKeyAndValue)}}
}
被观察者桥梁:
package com.xiayiye.takeout.utilsimport java.util.*/** Copyright (c) 2020, smuyyh@gmail.com All Rights Reserved.* # #* # _oo0oo_ #* # o8888888o #* # 88" . "88 #* # (| -_- |) #* # 0\ = /0 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永无BUG #* # #*//*** @author 下一页5(轻飞扬)* 创建时间:2020/3/7 14:28* 个人小站:http://yhsh.wap.ai(已挂)* 最新小站:http://www.iyhsh.icoc.in* 联系作者:企鹅 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 项目名称:XiaYiYeTakeOut* 文件包名:com.xiayiye.takeout.utils* 文件说明:订单改变被观察者*/
class OrderChangeFunction : Observable() {fun changeOrderStatus(pushKeyAndValue: String) {//从推送收到最新订单消息setChanged()notifyObservers(pushKeyAndValue)}companion object {val instance = OrderChangeFunction()}
}
观察者:
package com.xiayiye.takeout.ui.adapterimport android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.xiayiye.takeout.R
import com.xiayiye.takeout.model.beans.OrderData
import com.xiayiye.takeout.utils.OrderChangeFunction
import org.json.JSONObject
import java.util.*/** Copyright (c) 2020, smuyyh@gmail.com All Rights Reserved.* # #* # _oo0oo_ #* # o8888888o #* # 88" . "88 #* # (| -_- |) #* # 0\ = /0 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永无BUG #* # #*//*** @author 下一页5(轻飞扬)* 创建时间:2020/3/6 20:36* 个人小站:http://yhsh.wap.ai(已挂)* 最新小站:http://www.iyhsh.icoc.in* 联系作者:企鹅 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 项目名称:XiaYiYeTakeOut* 文件包名:com.xiayiye.takeout.ui.adapter* 文件说明:订单观察者*/
class OrderRvAdapter(private val context: Context, private val orderList: List<OrderData>) :RecyclerView.Adapter<OrderRvAdapter.OrderViewHolder>(), Observer {override fun update(p0: Observable?, pushKeyAndValue: Any?) {//观察者,拿到订单最新状态//解析json数据val jsonObject = JSONObject(pushKeyAndValue as String)val orderId = jsonObject.optString("id")val orderType = jsonObject.optString("type")Log.e("打印推送TakeOutReceiver", "$orderId=$orderType")for (index in 0 until orderList.size) {val orderDataStatus = orderList.get(index)if (orderDataStatus.id == orderId) {//更新订单状态orderDataStatus.type = orderType//刷新全局adapternotifyDataSetChanged()//刷新单个订单状态改变的item
// notifyItemChanged(index)}}}init {//添加绑定关系OrderChangeFunction.instance.addObserver(this)}
}
Android开发之使用观察者模式结合推送实现订单自动刷新相关推荐
- iOS和Android即时通讯开发时后台实时消息推送的原理和区别
iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本 ...
- android9谷歌推送,谷歌Android 9.0系统将统一推送以改善更新碎片化
原标题:谷歌Android 9.0系统将统一推送以改善更新碎片化 玩懂手机网消息,Android和iOS一直是用户眼中两种不同的代名词,Android非常开放,是高度可定制的操作系统,设备制造商还是开 ...
- 关于Android安卓APP保活 - 安卓消息推送详解 - 安卓端外推送离线推送
转自:http://zhangtielei.com/posts/blog-android-push.html 说Android端外推送比较烦,实际有两层意思:首先是说实现上比较麻烦,至今业界也没有找到 ...
- 关于云开发新服务“实时数据推送”,你需要了解的全在这了!
"微信小程序工程师邓坤力带你了解如何利用千呼万唤始出来的云开发实时数据推送服务打造生动的小程序和小游戏!" 在数据库在小程序·云开发中的应用一文中,我们了解到实时数据推送作为云开发 ...
- IOS开发之实现App消息推送(最新)
IOS开发之实现App消息推送(最新) 标签: 推送最新AppStoreXCode6ios开发 2014-11-19 21:13 58412人阅读 评论(77) 收藏 举报 分类: IOS ...
- 基于阿里云 Serverless 函数计算开发的疫情数据统计推送机器人
一.Serverless函数计算 什么是Serverless? 在<Serverless Architectures>中对 Serverless 是这样子定义的: Serverless w ...
- android融云消息提示,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多人在嵌入融云SDK之后,遇到过Android手机收不到消息推送问题.下面来给大家一些干货.解决Android类手机收不到消息推送的解决方法.供大家参考 ...
- python 全栈开发,Day103(微信消息推送,结算中心业务流程)
python 全栈开发,Day103(微信消息推送,结算中心业务流程) 昨日内容回顾 第一部分:考试题(Python基础)第二部分:路飞相关 1. 是否遇到bug?难解决的技术点?印象深刻的事?- o ...
- 融云 android 推送图标,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多人在嵌入融云SDK之后,遇到过Android手机收不到消息推送问题.下面来给大家一些干货.解决Android类手机收不到消息推送的解决方法.供大家参考 ...
最新文章
- 线程学习5——竞态条件
- Java动态追踪技术探究
- EnterpriseLibrary2.0系列文章及下载
- IE打印控件推荐-4fang pazu
- 2017春季华为实习生编程题
- 模糊神经网络PID控制的一个例子
- SCI论文写作--IEEE的期刊和杂志区分
- 算法 --- [map的使用]求最大和谐子序列
- 一个小菜鸟给未来的菜鸟们的一丢丢建议
- css3 下边框缓缓划过_干货来袭!web前端开发工程师必看之如何使用CSS3实现瀑布流效果?...
- 学习设计模式——工厂方法模式
- HBase HA完全分布式环境搭建
- IntellijIDEA配置Maven
- mysql acid介绍_InnoDB ACID模型介绍
- 安卓从入门到进阶推荐学习方法与书籍整理(pdf)
- Reportlab生成图文并茂的pdf报告
- 转载一篇让你全面了解什么是.NET。
- 新华全媒+|探秘北迁象群的“家”和“家人们”
- android版本内存卡,版本等级繁多 教你如何挑选手机内存卡
- 转圈加载html,web前端入门到实战:纯CSS实现加载转圈样式
热门文章
- vant 动态 粘性布局_CSS Viewport 单位,很多人还不知道使用它来快速布局!
- mysql workbench 6.2_如何在MySQL Workbench 6.2查询中运行.sql文件?
- esp32 怎么分配freertos 堆栈大小_嵌入式开发入门-从STM32CudeMX、FreeRtos、Proteu仿真开始...
- android 毕业设计 文献翻译,android毕业设计外文翻译.doc
- wps如何交叉引用多个文献_WPS中引用参考文献的设置
- 【Rxjs】 - 解析四种主题Subject
- 使用maven时报错Dynamic Web Module 3.1 requires Java 1.7 or newe
- ubuntu安装QT4的方法
- 阿里前CEO卫哲的万字长文:被马云骂醒,看透B2B 10大核心问题!
- dataTables去掉搜索框,每页多少条框体,解决Cannot reinitialise DataTable问题,以及数据格式ajax等问题...