美文网首页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