基于kotlin+RxJava2+Retrofit2的练手项目

2,919 阅读3分钟

项目介绍

前言

此项目是基于Kotlin,RxJava2和Retrofit2开发的一个完全模仿于知乎日报的app,鉴于最近刚好学了kotlin语言,此项目用于练手。其中api的地址来源于https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90 。对于刚好学了kotin,在使用rxjava和retrofit相结合的情况下,代码确实很多坑,好在在自己的不懈努力下基本上完成了该项目,该项目的用时也不是很长,只用了三天多的时间。在项目期间还是了解了很多的知识。

项目整体搭建

项目添加的部分依赖如下:

    //Design
    implementation 'com.android.support:design:26.1.0'
    //CardView
    implementation 'com.android.support:cardview-v7:26.1.0'
    //RxJava
    implementation 'io.reactivex.rxjava2:rxjava:2.1.3'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    //RxBinding
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
    //rxrelay
    implementation 'com.jakewharton.rxrelay2:rxrelay:2.0.0'
    //circleimageview
    implementation 'de.hdodenhof:circleimageview:2.1.0'
    //retrofit and okhttp
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.8.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    //rxlifecycle
    implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.1'
    implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.1'

其中retrofit网络封装如下:

    private constructor() {
        var logging = HttpLoggingInterceptor(object : Logger{
            override fun log(message: String?) {
            }
        })
        logging.setLevel(HttpLoggingInterceptor.Level.BODY)
        mCookieManager = CookieManager()
        mCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL)
        mOkHttpClient = OkHttpClient.Builder()
                .addInterceptor(logging)
                .connectTimeout(20, SECONDS)
                .cookieJar(JavaNetCookieJar(mCookieManager))
                .build()
        var url = "http://news-at.zhihu.com/api/4/"
        mRetrofit = Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(mOkHttpClient)
                .build()
        api = mRetrofit.create(Api::class.java)
    }

部分API如下:

    @GET("news/latest")
    fun latestNews(): Observable<Response<LatestNews>>

    @GET("news/before/{time}")
    fun beforeNews(@Path("time") time : String): Observable<Response<LatestNews>>

    @GET("theme/{item}")
    fun otherNews(@Path("item") item : String): Observable<Response<InternetNews>>

因为接口比较少,功能比较少。只是简洁的封装了一次,没有对response的结果进行处理,如果在自己的项目里面一定要对其response进行处理。便于修改和处理问题。

其中在activity中调用入如下:

   HttpClient.getInstance()
            .service()
            .getSection(String.format("%d", section!!.id), time)
            .compose(SchedulerTransformer<Response<LisSections>>())
            .compose(DataTransformer<LisSections>())
            .observeOn(AndroidSchedulers.mainThread())

部分界面效果如下:

总结

首先做这个项目是受于我朋友的启发。早在之前就学习了kotlin,但是都仅限于学习学习语法,写写小demo等,并没有实际运用于项目之中,开始想着公司如果有机会的话自己就大展身手,毕竟是google官方支持的语言。然而苦于公司并没有如此的机会,自己也就这样抛在一边并没有管,就在前几天和朋友聊天谈论到kotlin,朋友就建议我写个小的项目试试,我就在网上找了部分的关于知乎日报的API接口。鉴于此就完全按照知乎日报的界面进行绘制,功能的添加。历时三天的时间终于完成了(此处只针对部分GET请求,POST请求在该项目没有添加,因为涉及到数据侵权问题,此处没有添加。但是基本的功能都是有)。完成时间比较短暂,因为时间有限,后期还会转到MVP模式。所以我打算也把源码公开,如果有网友感兴趣的话也可以提提意见,后期会在项目里面完善。

APK下载地址:http://fir.im/yn4r

源码存放于百度云上面的。此处为百度云下载地址:链接:https://pan.baidu.com/s/1gfbAHgf 密码:nqgw。

欢迎大家关注我的公众号:Android总结