基於WanAndroid開放Api的黑白系App
關注 ofollow,noindex">wanandroid 有些時日了,一直以來也是鴻洋大神的粉絲,一直都有用他開放的 api 寫一個App的打算,最近時間比較充裕,所以就抽時間完成了這樣一款。Github上的wanadnroidApp已經非常的多了。有很多也很優秀,但是我覺得開放api的目的是讓大家都參與其中,所以這款app是我完全按照自己的思維去寫的,UI想怎麼寫就怎麼寫,架構想怎麼寫就怎麼寫,又不是上班時間,別對自己有那麼多的要求。只求更熟練的掌握Kotlin和打發多餘的時間,當然這個專案能給予大家消遣或者給新手一些啟發,那就是賺到了!
現在也不是完整版本,後續有時間會持續的更新此App(也就是想到想優化的東西的時候,或者鴻洋大神更新了他的api的時候),希望大家看的開心、玩的愉快~
簡介
本專案使用 kotlin+mvp+retrofit+anko+eventbus+glide,用的都是一些很主流的框架。當然專案中其實沒有太多的技術難點,主要是當你有一項技能之後,不做點自己的東西,手就會癢~~
- kotlin
- anko
- retrofit2
- okhttp3
- Android" target="_blank" rel="nofollow,noindex">BGABanner
- BGASwipeBack
- RecyclerViewAdapterHelper" target="_blank" rel="nofollow,noindex">BaseRecyclerViewAdapterHelper
- glide
- EventBus" target="_blank" rel="nofollow,noindex">eventbus
- PermissionsDispatcher (更新功能需要檔案讀寫許可權)
- retrofit2:converter-gson(GsonConverterFactory)
- okhttp3:logging-interceptor(HttpLoggingInterceptor)
- bugly(更新、統計、異常上報)
- font(靜蕾體)
APK下載(5.0+)

下載體驗
專案截圖

首頁框架

個人、登入註冊

詳情、關於、分享
部分功能解析
1、MVP
極簡的MVP設計,這是此前自己參考一些專案之後寫的 MVPSample ,適合這種小專案玩耍
abstract class BaseActivity<out P : BasePresenter<*>> : AppCompatActivity(){ protected val mPresenter: P? by lazy { initPresenter() } }
abstract class BasePresenter<T : IView>(view: T) { protected var mView: T? = view fun onDestroy() { mView = null } }
interface IArticlePageContract { interface Presenter{ fun getxxxx() } interface View:IView{ fun onxxxxSuccess(data: xxxx) fun onxxxxFailed(msg: String) } }
2、網路請求
普通的 Retrofit 封裝,使用 GsonConverterFactory 解析資料,保持登入使用的是 ReadCookiesInterceptor 和 SaveCookiesInterceptor 讀取和儲存Cookie。
ApiCallBack使用lambda回撥,並進一步簡化回撥資訊,合併為BaseResult同意處理。
class ApiCallBack<T>(val result: BaseResult<T>.() -> Unit) : Callback<BaseResult<T>> { override fun onResponse(call: Call<BaseResult<T>>, response: Response<BaseResult<T>>) { val code = response.code() if (code in 200..299) { val errorCode = response.body()?.errorCode if (errorCode == -1001) {//需要重新登入 App.instance.user = null } else { response.body()!!.result() } } else { onFailure(call, RuntimeException("response error,detail = " + response.raw().toString())) } } override fun onFailure(call: Call<BaseResult<T>>, throwable: Throwable) { val error = when (throwable) { is SocketTimeoutException -> "網路不給力!" is ConnectException -> "當前的網路不通!" is UnknownHostException -> "當前的網路不通!" else -> "當前服務異常!" //可進一步細分錯誤型別 } BaseResult<T>().apply { errorCode = -1 errorMsg = error }.result() } }
這樣處理回撥的時候就可以很簡單的如下處理:
ApiHelper.api.xxxx(xxxx).enqueue(ApiCallBack { if (isSuccess) { mView?.onXxxxSuccess(data!!) } else { mView?.onXxxxFailed(errorMsg) } })
3、推薦一波 BaseRecyclerViewAdapterHelper
這個包含了自動loadmore,emptyView,header,footer,moreType等一些列很實用的功能,使用後RecyclerView的介面卡如下,非常方便的使用:
class HomeAdapter : BaseQuickAdapter<ArticleItem, BaseViewHolder>(R.layout.item_home_article) { override fun convert(helper: BaseViewHolder?, item: ArticleItem?) { val itemView = helper?.itemView itemView?.apply { item?.let { //do something } } } }
4、關於頁面
這是個載入的本地Html,是摳了 WanAndroid-About 然後加上了關於本App的介紹,使用了自己僅有CSS技術做了一個簡單的手機適配。(最近大家也知道,感覺Android越來越不景氣了,大家還從事android的一定要拓展,要嘛更深,要嘛更廣~~~說實話好想轉行)

關於WanAndroid
版本資訊
v1.1.0.0(TODO)
- [ ] 知識體系
- [ ] TODO工具
- [ ] 搜尋功能
- [ ] 優化專案頁瀑布流顯示
v1.0.0.3
- [x] 引入bugly,增加升級功能
v1.0.0.2
- [x] 刪除部分無用的庫
v1.0.0.1
- [x] 優化title顯示
v1.0.0.0
- [x] 首頁文章與Banner
- [x] 微信文章
- [x] 專案
- [x] 登入註冊
- [x] 我的收藏
TKS
- 感謝鴻洋大神建立了這麼好的學習網站 WanAndroid
- 感謝大神百忙之中抽空寫的 開放api
- 感謝專案中使用到的各種庫的無私奉獻
專案地址
https://github.com/leiyun1993/WanAndroid 希望各位看官不吝Star~~~