android數據封裝
① Android 關於 OkHttp 請求對參數進行加解密的封裝
不加密的情況下,數據一般是這樣的(當然,data 也可能是一個列表):
加密的情況下:
這里不強制要求返回類型是 Result,只需要服務端返回的 json 數據的第一層級中有 "data" 欄位即可,取出該欄位進行解密,並重新賦值該欄位,然後再進行解析
interceptor 的方式效率要高點,但是 converter 的枯橡方式要更加靈活點。
這里採用了把 encryptKey 也放在 body 里一起傳輸的方案,所以實現起來有點麻煩;其實也可以選擇把 encryptKey 放沒虧旁在 header 里,然後對 body 整體加解密的方案,這樣實現起來就會空世簡單一些
② Android里的封裝,繼承,多態,都是表現在哪裡,都是有什麼方法,有什麼
封裝,例如android中一個View就是封裝了一系列的方法,這些方法系統已經給你封裝好了,你只需要去調用即可。
繼承,例如一個Activity(界面),創建一個界面就需要去繼承它,因為android中每個界面都是一個activity組成的(Fragment也是運行在activity中的)。
多態,這個比較抽象也比較難解釋,就像一個View,給它注冊一個點擊事件來說吧,系統用的只是一個介面,但是用戶可以用一個實現介面的類來處理這個點擊事件,這就是多態性,因為對於android來講,它根本不知道用戶會起個什麼名實的類,它只要你實現它的介面即可。
③ Android 基類BaseActivity的封裝
摘要
本篇總結了前人寫的BaseActivity,自己在開發過程中也添添補補,刪刪改改,現在總結下。
本篇很多知識借鑒和學習了知乎上iYng大大的回答,先感謝一波。順便上原文鏈接:
https://www.hu.com/question/47045239/answer/105086885
正文
一般來說,不同的項目的BaseActivity不盡相同,根據不同的業務邏輯和功能需求,會有很多區別。這里總結了一些,如下:
視圖相關
一般的Activity里都會用到很多的findViewById這個方法,而且每次都要強制類型轉換,這樣會顯得很繁瑣,如果在BaseActivity里封裝好,就能省事:
這樣只要是繼承了BaseActivity就能輕松使用LinearLayout llContent = findView(R.id.ll_content);,免去了諸多類型轉換的麻煩。
然後說起視圖,一般的Activity里都會需要初始化視圖和數據,所以可以暴露兩個方法initView()和initData():
然後在setContentView里去調用,一般都是先initView,然後再initData:
這樣子類里都必須重寫initView()和initData()了,邏輯也能清晰點,不然什麼東西都放在onCreate里,就很亂了;
用戶模塊(業務相關【可選】)
不過一般的app,只要是有登錄的,就會有用戶模塊,也會根據用戶標識id去進行一些網路操作,所以用戶模塊可以在BaseActivity中暴露一些方法,比如用戶id的獲取:
這里就是返回了SharedPreference里存儲的用戶id,在用戶id大量被使用的場景下,這樣的封裝還是很有必要的,使用起來也更便捷。當然如果只是純展示的app就不一定需要了,或許顯得多餘。
界面間跳轉傳參
很多時候,Activity之間都會傳參,所以可以封裝一個參數處理的函數initParam(),在BaseActivity的onCreate里去判斷是否有參數傳過來;
然後把initParam()方法暴露給子類:
這個方法並不是必須重寫的,因為傳參也沒有想像中那麼多,並不需要強制重寫這個方法。
一般會在Application類里去定義一個isDebug來判斷是否開啟調試(開發者模式):
在BaseActivity里,我們可以把isDebug作為總開關,然後控制是否顯示調試信息:
這樣一鍵關閉調試,不用去一個個刪項目里的Log信息,是不是很贊?
每次Toast,都用Toast.makeText(...).show();是不是很煩?那麼可以在BaseActivity里封裝下,比如:
這里ToastUtils就是一個Toast封裝類,裡面的內容估計大家都懂。然後這樣一來,所有子類在使用時,只需要瀟灑寫一句toast("xxxx")就行了,當然也可以一並封裝Toast.LENGTH_LONG和Toast.LENGTH_SHORT,按需封裝吧。
其他
軟鍵盤
有的app里,用戶輸入的情景會比較多,這個時候,軟鍵盤的隱藏就用的多了,用戶輸入完之後,或者用戶點擊屏幕空白處,都應該去隱藏軟鍵盤,這樣的話,可以考慮在BaseActivity里寫隱藏的方法:
上面3個方法也是很實用的。dispatchTouchEvent方法不需要手動調用,只要是有點擊事件,並且點擊在軟鍵盤和EditText區域外,就會隱藏軟鍵盤。
防止快速點擊
有時候,用戶(特別是測試猿)會瘋狂的點擊app,這一舉動的原因和意義不明,但是我們可以設置防止快速點擊給app造成的傷害和負擔:
這樣在1秒之內只會響應一次,麻麻再也不用擔心我手抽筋亂點了。
那麼怎麼用呢?舉個栗子,可以在onClick介面里去判斷下嘛:
頁面跳轉:startActivity、startActivityForResult
這個也是可選的,可以封裝下,達到每次跳轉不需要傳this或者XXXXX.this這種參數:
這些方法還是很便捷的,使用時可以簡單的使用startActivity(MainActivity.class);,也可以傳Bundle參數。
是否允許全屏
設置一個成員變數mAllowFullScreen
通過在BaseActivity的onCreate方法里判斷mAllowFullScreen來設置是否允許全屏:
然後給子類暴露一個方法來設置mAllowFullScreen:
設置沉浸式狀態欄
跟設置全屏一樣一樣的:
然後BaseActivity的onCreate里:
然後定義steepStatusBar()方法,用來設置沉浸式狀態欄:
這里就要判斷系統版本了。只有在KITKAT以上才有作用。
最後給子類暴露方法,設置 isSetStatusBar的值:
設置是否允許屏幕旋轉
跟前面兩種思路一樣,通過判斷變數,在onCreate里設置咯:
BaseActivity里的onCreate方法:
最後暴露方法設置isAllowScreenRoate的值:
總結
上面的這些方法大都是比較常用的,有些雖然不是很常用,但是寫了也會方便一點,把這篇文章當做一個匯總,然後按需使用唄。
④ android 資料庫表查詢出來的多條記錄返回客戶端怎麼封裝成json string
sqlite中每一行看成一個JSONObject,結果集看成jsonarray。
⑤ android studio pickerview 數據怎麼封裝
封裝就是數據打包,拆包就是解包。1般發送方把需要發送的數據打包發出去後,接收方收到包後解包解出數據。