最近再做一個項目,把微信網頁版的接口解析出來,自定義界面,實現微信聊天的功能。
面臨一個很直接,很蛋疼的問題,頭像獲取的問題,在初始化微信請求成功后,返回的response中會帶一個cookies,這個cookies需要保存下來,接下來每次請求微信消息都要帶上。
不然,微信的后台不會給你傳輸任何數據回來,很是蛋疼。
頭像獲取怎么辦?用Glide框架,可以省很多事情,但是怎么把cookies添加進去呢?
自己寫自定義控件,里面自己實現網絡請假也可以,但是內存優化,緩存問題怎么辦? 而且自己寫的和glide框架比,肯定有很多不足。
剛開始自己寫一個簡單的Okhttp請求,在返回來后通過handler來刷新頭像。但是在緩存時,和復用listview時,會出現圖片顯示不對的情況。用了線程池去維護子線程請求,但還是感覺慢,不如框架。
只能好好研究下Glide框架怎么添加cookies了。
在網上也有很多方法,但說的都是雨里霧里的,如果是小白,肯定看不懂。
首先大家要知道,Glide在3.6.0之后的版本,才支持添加請求頭,如果各位的glide版本比較老,這樣的話,里面添加cookies的類,你是怎么都找不到的,這一點就導致很多人懵逼。
這點知道后,后面的事情就很簡單了。
GlideUrl cookie = new GlideUrl(mPath, new LazyHeaders.Builder().addHeader("Cookie", MyApplication.cookie).build());
Glide.with(getContext()).load(cookie).placeholder(R.drawable.loading1).into(this);
就這兩行代碼就可以搞定,cookie就是你請求回來的cookies解析成的字符串。 相當於自定義一個GlideUrl,里面不知可以添加cookie,請求頭中的所用東西都可以添加,這個看大家需求。
我這里是自定義了一個imageview,所以into 是this。
這樣比較好的就是,處理邏輯都在自定義控件中,你只需要傳遞一個path過來就可以了。
也是我現在寫代碼的一個思想,能自己做的事情,交給自己去做,不要在外面去寫過多的邏輯,這樣會導致類之間聯系緊密,做封裝和抽取都會不方便。
如果自己做的事情過多,或者自己做的事情比較重復,可以再向上抽取父類,super類,總之讓重復代碼減少,讓有效代碼增多,讓邏輯更加具有條理性,這樣的代碼就是我認為的簡潔代碼。
比如添加數據,怎么辦,寫一個接口,里面有增刪改查幾大方法,去寫一個實現類來實現此接口,里面是對數據庫進行的增刪改查的操作,再去寫一個單例類,里面的成員變量就可以是data這個類,在里面寫增刪改查的方便,這樣,我可以調用這個單例,可以直接做增刪改查的操作,這樣所有的增刪改查的邏輯都在這邊,不會出現這一堆、那一堆的清理,數據的邏輯就會很清楚。
這個項目還用到數據庫GreenDao,很方便的數據庫使用,下篇給大家介紹。
