美文网首页Android技术知识Android开发Android开发
基于WanAndroid开放Api的黑白系App

基于WanAndroid开放Api的黑白系App

作者: Yun丶Lei | 来源:发表于2018-10-25 11:34 被阅读207次

    关注wanandroid有些时日了,一直以来也是鸿洋大神的粉丝,一直都有用他开放的api写一个App的打算,最近时间比较充裕,所以就抽时间完成了这样一款。Github上的wanadnroidApp已经非常的多了。有很多也很优秀,但是我觉得开放api的目的是让大家都参与其中,所以这款app是我完全按照自己的思维去写的,UI想怎么写就怎么写,架构想怎么写就怎么写,又不是上班时间,别对自己有那么多的要求。只求更熟练的掌握Kotlin和打发多余的时间,当然这个项目能给予大家消遣或者给新手一些启发,那就是赚到了!

    现在也不是完整版本,后续有时间会持续的更新此App(也就是想到想优化的东西的时候,或者鸿洋大神更新了他的api的时候),希望大家看的开心、玩的愉快~

    简介

    本项目使用 kotlin+mvp+retrofit+anko+eventbus+glide,用的都是一些很主流的框架。当然项目中其实没有太多的技术难点,主要是当你有一项技能之后,不做点自己的东西,手就会痒~~

    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解析数据,保持登录使用的是ReadCookiesInterceptorSaveCookiesInterceptor读取和保存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

    • 引入bugly,增加升级功能

    v1.0.0.2

    • 删除部分无用的库

    v1.0.0.1

    • 优化title显示

    v1.0.0.0

    • 首页文章与Banner
    • 微信文章
    • 项目
    • 登录注册
    • 我的收藏

    TKS

    • 感谢鸿洋大神创建了这么好的学习网站WanAndroid
    • 感谢大神百忙之中抽空写的开放api
    • 感谢项目中使用到的各种库的无私奉献

    项目地址

    https://github.com/leiyun1993/WanAndroid希望各位看官不吝Star~~~

    相关文章

      网友评论

      • 皮特天:本人开发Android二年多了,一直想自己开发一个属于自己app,但是每次都停在设计这一步,不会设计,也不知道怎么搞ui图片,设计等等,请问您是怎么做设计一块的呢
        Yun丶Lei:主题色我一般是多上UI中国之类的网站看,比如你想用红色,看多了你就该知道哪个红色最好看,最适合你的APP。图标啥的自己也不会,一般都是上阿里的ICONFONT找适合的。至于其他的如果自己有能力写接口那最好,如果没有能力那就去找开放的api练手。上班时如果你不负责架构或则选型的话,只有在自己的项目上你才会仔细的去研究这些东西!

      本文标题:基于WanAndroid开放Api的黑白系App

      本文链接:https://www.haomeiwen.com/subject/vkuqtqtx.html