前提(必看):(否則你發現我的問題你完全看不懂!
- 我前后端交互使用的Netty,tcp傳輸;
- 獲取數據繼承的SimpleChannelInboundHandler,因為我認為我處理不好數據資源釋放問題(so交給繼承類來處理);
- 服務端傳到客戶端數據后通過在上一條繼承類的類中實現數據分發到各個activity,並通過Handler傳輸數據,我認為這樣實現了數據的及時性,雖然廣播好像也可以,但是我對廣播及接口還沒有完全弄清楚。
- 通過獲取其他ativity的handler來發送Message。
問題:
- A點擊添加B之后,B收到服務端轉發的好友邀請,點擊好友邀請通知后自動彈出並回到登錄頁面,並斷開服務端連接。
問題原因:客戶端發送handler時,由於用戶從未點擊過邀請信息頁面,activity未初始化,獲取到的handler為null,發送失敗,出現錯誤。
問題解決:通過給獲取的handler添加try-catch捕捉異常,並作判空處理,代碼思路其實不需要修改,如果在用戶頁面收到邀請后,邀請信息則更新到數據庫,進入邀請頁面后獲取數據庫邀請信息,自然獲取到來自服務端轉發的邀請。
- A接受好友邀請后,回到用戶頁面,未更新好友列表。
問題原因:進入用戶頁面后沒有任何通知告訴他要刷新好友列表。
問題解決:A在邀請頁面接受邀請后發送刷新好友列表Handler Message給用戶頁面,用戶回到用戶頁面后成功刷新。
- 添加好友頁面,點擊一次添加后發送添加好友成功則添加按鈕不再具備其添加功能,但是更換查找好友信息時,添加按鈕功能也未恢復。
問題原因:未在查找成功后對添加按鈕功能設置為true.
問題解決:設置按鈕bt.setEnable(true).
- 異步登錄獲取好友邀請,總是沒有成功獲取?
問題原因:用戶登錄后還未進入用戶頁面就收到好友邀請,由於未初始化handler無法正常傳輸好友邀請給用戶。
問題解決:在傳輸數據代碼中添加循環,若未獲取到handler則使用線程修眠2秒,直至進入用戶頁面(這個方法可能不怎么好,因為我的邀請通知沒辦法顯示,但是邀請信息正常顯示)。
- 用戶獲取其標簽時總需要每次都存儲到數據庫,再從數據庫獲取。
問題解決:使用static變量存儲標簽,每次生成后存儲到其類中(使用set方法),每次獲取使用其類的get方法。