日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android开发之使用观察者模式结合推送实现订单自动刷新

發(fā)布時(shí)間:2023/12/15 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之使用观察者模式结合推送实现订单自动刷新 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

老套路:先上效果圖:請(qǐng)看第二個(gè)訂單狀態(tài)

說(shuō)下思路:訂單狀態(tài)改變是后臺(tái)改變了,然后通過(guò)三方推送訂單數(shù)據(jù)到手機(jī),手機(jī)端通過(guò)拿到推送的數(shù)據(jù)進(jìn)行自動(dòng)刷新訂單狀態(tài),這里面用到了Java設(shè)計(jì)模式中的:觀(guān)察者模式。

接收推送的哪個(gè)類(lèi)就是被觀(guān)察者,接收到推送訂單數(shù)據(jù)就會(huì)通過(guò)觀(guān)察者進(jìn)行數(shù)據(jù)的更新

被觀(guān)察者:代碼都是Kotlin寫(xiě)的

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 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永無(wú)BUG #* # #*//*** @author 下一頁(yè)5(輕飛揚(yáng))* 創(chuàng)建時(shí)間:2020/3/7 13:20* 個(gè)人小站:http://yhsh.wap.ai(已掛)* 最新小站:http://www.iyhsh.icoc.in* 聯(lián)系作者:企鵝 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 項(xiàng)目名稱(chēng):XiaYiYeTakeOut* 文件包名:com.xiayiye.takeout.utils* 文件說(shuō)明:自定義推送消息的類(lèi)*/ 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) // 通過(guò)觀(guān)察者模式更新訂單狀態(tài)OrderChangeFunction.instance.changeOrderStatus(pushKeyAndValue)}} }

被觀(guān)察者橋梁:

package com.xiayiye.takeout.utilsimport java.util.*/** Copyright (c) 2020, smuyyh@gmail.com All Rights Reserved.* # #* # _oo0oo_ #* # o8888888o #* # 88" . "88 #* # (| -_- |) #* # 0\ = /0 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永無(wú)BUG #* # #*//*** @author 下一頁(yè)5(輕飛揚(yáng))* 創(chuàng)建時(shí)間:2020/3/7 14:28* 個(gè)人小站:http://yhsh.wap.ai(已掛)* 最新小站:http://www.iyhsh.icoc.in* 聯(lián)系作者:企鵝 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 項(xiàng)目名稱(chēng):XiaYiYeTakeOut* 文件包名:com.xiayiye.takeout.utils* 文件說(shuō)明:訂單改變被觀(guān)察者*/ class OrderChangeFunction : Observable() {fun changeOrderStatus(pushKeyAndValue: String) {//從推送收到最新訂單消息setChanged()notifyObservers(pushKeyAndValue)}companion object {val instance = OrderChangeFunction()} }

觀(guān)察者:

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 #* # ___/`---'\___ #* # .' \\| |# '. #* # / \\||| : |||# \ #* # / _||||| -:- |||||- \ #* # | | \\\ - #/ | | #* # | \_| ''\---/'' |_/ | #* # \ .-\__ '-' ___/-. / #* # ___'. .' /--.--\ `. .'___ #* # ."" '< `.___\_<|>_/___.' >' "". #* # | | : `- \`.;`\ _ /`;.`/ - ` : | | #* # \ \ `_. \_ __\ /__ _/ .-` / / #* # =====`-.____`.___ \_____/___.-`___.-'===== #* # `=---=' #* # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #* # #* # 佛祖保佑 永無(wú)BUG #* # #*//*** @author 下一頁(yè)5(輕飛揚(yáng))* 創(chuàng)建時(shí)間:2020/3/6 20:36* 個(gè)人小站:http://yhsh.wap.ai(已掛)* 最新小站:http://www.iyhsh.icoc.in* 聯(lián)系作者:企鵝 13343401268* 博客地址:http://blog.csdn.net/xiayiye5* 項(xiàng)目名稱(chēng):XiaYiYeTakeOut* 文件包名:com.xiayiye.takeout.ui.adapter* 文件說(shuō)明:訂單觀(guān)察者*/ class OrderRvAdapter(private val context: Context, private val orderList: List<OrderData>) :RecyclerView.Adapter<OrderRvAdapter.OrderViewHolder>(), Observer {override fun update(p0: Observable?, pushKeyAndValue: Any?) {//觀(guān)察者,拿到訂單最新?tīng)顟B(tài)//解析json數(shù)據(jù)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) {//更新訂單狀態(tài)orderDataStatus.type = orderType//刷新全局adapternotifyDataSetChanged()//刷新單個(gè)訂單狀態(tài)改變的item // notifyItemChanged(index)}}}init {//添加綁定關(guān)系OrderChangeFunction.instance.addObserver(this)} }

?

總結(jié)

以上是生活随笔為你收集整理的Android开发之使用观察者模式结合推送实现订单自动刷新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。