国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android開發(fā) -- Retrofit + Rxjava + Kotlin => Requ

番茄西紅柿 / 2340人閱讀

摘要:前言使用和以及基于配置網(wǎng)絡(luò)請求端口,并使用百科的搜索接口獲得搜索詞條相關(guān)數(shù)目步驟引用庫創(chuàng)建服務(wù)接口由于需要的變量有些多,所以使用來統(tǒng)一管理變量,在中定義。總結(jié)在分線程中無法改變,也就是說必須在線程中才能改變布局。

前言

使用Retrofit 和 Rxjava以及基于kotlin配置網(wǎng)絡(luò)請求端口,并使用Wiki百科的搜索接口獲得搜索詞條相關(guān)數(shù)目:https://en.wikipedia.org/w/api.php);

步驟

    引用庫:

    //Retrofit
    implementation "com.squareup.retrofit2:retrofit:2.4.0"
    //Gson converter
    implementation "com.squareup.retrofit2:converter-gson:2.3.0"
    //String
    implementation "com.squareup.retrofit2:converter-scalars:2.3.0"
    //okhttp
    implementation "com.squareup.okhttp3:okhttp:3.10.0"
    implementation "com.squareup.okhttp3:logging-interceptor:3.8.0"
    //Rxjava
    implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
    //Rxjava2
    implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
    implementation "io.reactivex.rxjava2:rxjava:2.1.9"

    創(chuàng)建服務(wù)接口

interface WikiApiService{
    @GET("api.php")
    fun hitCountCheck(@QueryMap options:Map<String,String>):Observable
    //an Observable, which is a Rxjava object that could analog as the endpoint fetcher result generator.
    companion object{
        fun create() :WikiApiService{
            val retrofit = Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://en.wikipedia.org/w/")
                .build()
            return retrofit.create(WikiApiService::class.java)
        }
    }
}

由于需要query的變量有些多,所以使用QueryMap來統(tǒng)一管理變量,在activity中定義HashMap。其中Observable返回的是一個object,是我們自己定義的獲取數(shù)據(jù)類,因為我們想獲取類似這種數(shù)據(jù):

{
 batchcomplete: "",
 continue: {
  sroffset: 10,
  continue: "-||"
 },
 query: {
  searchinfo: {
   totalhits: 16776   //target data
 },
 search: [...

    創(chuàng)建數(shù)據(jù)索引對象

其中totalhits是我們想獲取的數(shù)據(jù),我們需要results -> query -> searchinfo -> totalhits ,所以我們需要創(chuàng)建一個新的object來存放數(shù)據(jù)索引:

object Model {
    data class Result(val query: Query)
    data class Query(val searchinfo: SearchInfo)
    data class SearchInfo(val totalhits: Int)
}

    在Activity中使用懶加載來創(chuàng)建observable實例并創(chuàng)建可取消的disposable:

private var disposable: Disposable);null   // disposable is a cancelable object
private val wikiApiServe by lazy {
    WikiApiService.create()
}

然后創(chuàng)建功能函數(shù):

@SuppressLint("SetTextI18n")
private fun beginSearch(srsearch : String){
    val options = HashMap()
    options["action"] = "query"
    options["format"] = "json"
    options["list"] = "search"
    options["srsearch"] = srsearch
    //Scheduler: Thread control
    disposable = wikiApiServe.hitCountCheck(options)
        .subscribeOn(Schedulers.io())  //subscribeOn(): choose a Thread to produce  I/O scheduler:(read&write data、read&write db、change info on the Internet)
        .observeOn(AndroidSchedulers.mainThread())  //observeOn(): choose a Thread to spend  AndroidSchedulers.mainThread(),on Android UI(main Thread)
        .subscribe(
            { result -> show_result.text = "${result.query.searchinfo.totalhits} results found"},
            { error -> Toast.makeText(this, error.message, Toast.LENGTH_LONG).show()}
        )
}

在需要獲取的edit text中使用這個功能函數(shù)就可以獲得該搜索詞條在wiki百科中的數(shù)目。

get_result.setOnClickListener {
    val text = edit_text.text.toString()
    if (edit_text.text.toString().isNotEmpty()){
        Toast.makeText(this, edit_text.text.toString(), Toast.LENGTH_LONG).show()
        beginSearch(text)
    }
}
總結(jié)

在分線程中無法改變UI,也就是說必須在UI線程(AndroidSchedulers.MainThrea())中才能改變UI布局。

創(chuàng)建接口服務(wù)的方法可以在interface中創(chuàng)建,也可以在Activity中創(chuàng)建,在interface中需要使用companion object,然后在Activity中實例化。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/7043.html

相關(guān)文章

  • Java進階之路

    摘要:探索專為而設(shè)計的將探討進行了何種改進,以及這些改進背后的原因。關(guān)于最友好的文章進階前言之前就寫過一篇關(guān)于最友好的文章反響很不錯,由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復(fù)雜的概念,只抓住關(guān)鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個可以進行周月切換的日歷,左右滑動的切換月份,上下滑動可以進行周,月不同的視圖切換,可以進行事件的標(biāo)記,以及節(jié)假日的顯示,功能豐富 Andr...

    sushi 評論0 收藏0
  • 「碼個蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...

    wangtdgoodluck 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<