第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將代碼重構(gòu)為 RxJava、循環(huán)位置和數(shù)組列表

將代碼重構(gòu)為 RxJava、循環(huán)位置和數(shù)組列表

暮色呼如 2021-11-17 10:43:34
我仍在學(xué)習(xí) RxJava,我知道什么是 Observable 和 Observers 的基本知識,但仍然困惑如何、何時何地使用過濾器、地圖、平面圖等您有什么好的建議如何將此代碼轉(zhuǎn)換為 RxJava 嗎?void locationChanged(LocationResult locationResult) {        for (Location location : locationResult.getLocations()) {        Double lat = location.getLatitude();        Double lng = location.getLongitude();        boolean isMock;        if (Build.VERSION.SDK_INT >= 18) {            isMock = location.isFromMockProvider();        } else {            isMock = !Settings.Secure.getString(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");        }        for (int k = 0; k < offices.size(); k++) {            Office office = offices.get(k);            Double d_lat = Double.valueOf(office.getOc_lat());            Double d_long = Double.valueOf(office.getOc_long());            Double d_radius = Double.valueOf(office.getOc_radius());            Location.distanceBetween(lat, lng, d_lat, d_long, resultApi);            String s_distanceToOffice = String.valueOf(resultApi[0]);            Double d_distanceToOffice = Double.parseDouble(s_distanceToOffice);            //Log.e(TAG, "locationChanged: Distance -> " + d_distanceToOffice);            // check-in in radius            if (d_distanceToOffice < d_radius) {                buttonOutOfRadius.setVisibility(View.GONE);                progressBarPosition.setVisibility(View.GONE);哪些代碼需要更改而無需更改?我做過這樣的事情:Observable.fromIterable(offices)                    .subscribeOn(Schedulers.io())                    .observeOn(AndroidSchedulers.mainThread())                    .subscribe()我是否需要將循環(huán)“for(..)”中的代碼復(fù)制粘貼到“oNext(Office office)”中?很高興從您的經(jīng)驗中得知。
查看完整描述

1 回答

?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗 獲得超4個贊

幾天后,我獲得了將其重構(gòu)為 Rx 的良好流程,


這是我在 kotlin 中的代碼,易于閱讀,如果您有更好的替代方案,請分享給我


private fun locationChanged(locationResult: LocationResult) {

    for (location in locationResult.locations) {


        val lat = location.latitude

        val lng = location.longitude

        var dDistanceToOffice: Double

        var dRadius: Double


        Observable.fromIterable(offices)

                .subscribeOn(Schedulers.newThread())

                .filter {

                    val dLat = it.oc_lat!!.toDouble()

                    val dLong = it.oc_long!!.toDouble()

                    dRadius = it.oc_radius!!.toDouble()


                    // Check the distance "MyLocation" to "OfficeLocation"

                    Location.distanceBetween(lat, lng, dLat, dLong, resultApi)

                    val sDistanceToOffice = resultApi[0].toString()

                    dDistanceToOffice = sDistanceToOffice.toDouble()


                    dDistanceToOffice < dRadius

                }

                .observeOn(AndroidSchedulers.mainThread())

                .subscribe(object : Observer<Office> {

                    override fun onSubscribe(d: Disposable) {

                        disposable = d

                    }


                    override fun onNext(office: Office) {

                        inArea = "Y"

                        siteName = office.oc_site

                        siteId = office.oc_id

                        siteLat = office.oc_lat!!

                        siteLong = office.oc_long!!

                    }


                    override fun onError(e: Throwable) {

                        Log.e(TAG, "locationChanged() Error: ${e.message}")

                    }


                    override fun onComplete() {

                        // checking the data in Area = N or Y

                        if (isMock(location)) {

                            processTheMock()

                        } else {

                            if (inArea == "Y") {

                                hideButtonOutRadius()

                                hideProgressbarPosition()

                                showButtonCheckin()

                                processNoMock(lat, lng, "In Radius", siteName!!)

                            } else {

                                retrofitGoogleGeocoding(lat, lng)

                                inArea = "N"

                                siteName = newAddress

                                siteLat = lat.toString()

                                siteLong = lng.toString()

                                hideButtonOutRadius()

                                hideProgressbarPosition()

                                showButtonCheckin()

                                processNoMock(lat, lng, "In Radius", siteName!!)

                            }

                        }

                        stopLocationUpdates()

                    }

                })

    } // end of location

}



查看完整回答
反對 回復(fù) 2021-11-17
  • 1 回答
  • 0 關(guān)注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號