GithubHelp home page GithubHelp logo

kotlin-network-request's Introduction

kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图:

          

 
Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库。可参考博客看详细介绍:Android开发之Retrofit+RxJava的使用

完成以上功能需引入:

    compile "com.android.support:appcompat-v7:$support_version"
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.anko:anko-common:$anko_version"
    compile 'com.zhy:okhttputils:2.6.2'
    compile 'com.alibaba:fastjson:1.1.54.android'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.1.6'
class MvpOkHttpActivity : BaseActivity<IView,PresenterEmlpe>(),IView {
override fun setMainLayout(): Int {
    return R.layout.activity_mvp_ok_http
}

override fun createPresenter(): PresenterEmlpe {
    return PresenterEmlpe()
}

override fun initView() {
    text.text="加载中......"
}

override fun initBeforeData() {
  btn.setOnClickListener {
      p!!.onRequest(Api.showRequestData("15","5"))
  }
}

override fun onLoadContributorStart() {
    toast("加载中......")
}

override fun onLoadContributorComplete(data: String) {
    Log.i("data",data)
    toast(data)
    //解析数据
    val entityTitle = JSON.parseObject(data, EntityTitle::class.java)
    if (entityTitle.data != null){
        text.text=entityTitle!!.data!!.get(0).title
    }

}

override fun onNetWrok() {
    toast("网络未连接")
}

override fun onError(error: String) {
    toast(error)
}

}

可见代码是相当比较少的,以MVP模式来完成的,主要有Model,Presenter,View

 

Model:

class ModelEmlpe : IMode{
override fun onRequest(url: String, map: Map&lt;String, String&gt;,callBackListenter: IMode.CallBackListenter) {

    OkHttpUtils.post().url(url).params(map).build().execute(object : StringCallback() {
        override fun onError(call: okhttp3.Call, e: Exception, id: Int) {
            callBackListenter.onError("加载数据失败")
        }

        override fun onResponse(response: String, id: Int) {
            callBackListenter.onDataCallBackListenter(response)
        }
    })
}

}

Presenter

class PresenterEmlpe : BasePresenter<IView>(){
var model: IMode? = null
init {
    model = ModelEmlpe()
}
fun onRequest(map: Map&lt;String,String&gt;){
    var iView = getView()
    if (model != null &amp;&amp; iView != null) {

        //验证网络  无网络不加载
        if (false){
            iView.onNetWrok()
            return
        }
        iView.onLoadContributorStart()//初始化
        model!!.onRequest(Api.url, map, object : IMode.CallBackListenter {

            override fun onDataCallBackListenter(data: String) {
               iView.onLoadContributorComplete(data)

            }
            override fun onError(error: String) {
                iView.onError(error)
            }

        })
    }

}

override fun detachView() {
    super.detachView()
    if (model != null){
        model = null
    }
}

}

当然解析数据也可以不用在Activity中完成,可以在我们的Presenter或Model中完成也是可以的,

 

我们的RxJava+Retrofit 提供了请求时就直接解析的功能,这点也可以好好运用。

 

两种请求方式的Activity,Presenter和View 其实是差不多的,就是Model层 实现的方式不一样而已。

kotlin-network-request's People

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.