In diesem Artikel wird eine detaillierte Erläuterung der einfachen Verpackung von Kotlin + Nachrüst + rxjava eingeführt. Es wird mit Ihnen geteilt. Die Details sind wie folgt:
Instanziierung nach restantiert
object RetrofitUtil { val CONNECT_TIME_OUT = 30//Connection timeout duration x seconds val READ_TIME_OUT = 30//Read data timeout duration x seconds val WRITE_TIME_OUT = 30//Write data timeout duration x seconds val retrofit: Retrofit by lazy { Log.d("RetrofitUtil", "retrofit init lazy") Retrofit.Builder() .baseurl ("http://gank.io/api/") // In diesem Artikel wird Github API als Beispiel verwendet. Private Fun getokhttpclient (): Okhttpclient {Val Builder = Okhttpclient.builder () builder.connectTimeout (connect_time_out.tolong (), Timeunit.seconds) .Writetimeout (write-time_out.tolong (), timeUnit.Seconds). TimeUnit.seconds) if (BuildConfig.debug) {builder.addInterceptor (httploggingInterceptor (). Kopfbauer Rückkehr zur Datenkapselung
Klasse Antwort <T> {var Fehler: boolean = false var Ergebnisse: t? = null}Die Entwicklungs -API von Gank.io wurde in der Demo verwendet. Das Rückgabeformat des vorherigen allgemeinen Projekts war Code + Message + T.
API -Schnittstellenfehler/Ausnahme Unified Handling Class
Klasse apiexception: Ausnahme {var code: int = 0 // Fehlercode var msg: String? = NULL // Fehlermeldung Konstruktor (Throwable: Throwable, Code: int): Super (Throwable) {this.code = Code} Konstruktor (Code: int, msg: string) {this.code = code this.msg = msg}}Definieren Sie die Ausnahmefunktion Handles OnErrorresumNext:
Klasse ExceptionFunction <T>: Funktion <Throwable, Beobachtbar <t >> {überschreiben Sie Spaß an (@nonnull Throwable: Throwable): Beobachtbar <T> {log.e ("ExceptionFunction", Throwable.Message) Beobachtbar.Error (Exceptiongine. 1000//Unknown error val ANALYTIC_SERVER_DATA_ERROR = 1001//Paste (server) data error val CONNECT_ERROR = 1002//Network connection error val TIME_OUT_ERROR = 1003//Network connection timeout fun handleException(e: Throwable): ApiException { val ex: ApiException if (e is ApiException) { //Error returned by the server return e } else if (e is Httpexception) {// http error ex = apiexception (e, e.code ()) ex.msg = "Netzwerkfehler:" + ex.code return ex} else if (e ist ANALYTIC_SERVER_DATA_ERROR) ex.msg = "Parse error" return ex } else if (e is ConnectException) {//Connect network error ex = ApiException(e, CONNECT_ERROR) ex.msg = "Connection failed" return ex } else if (e is SocketTimeoutException) {//Network timeout ex = ApiException(e, TIME_OUT_ERROR) ex.msg = "Network timeout" return ex} else {// Unbekannter Fehler ex = apiexception (e, un- Verarbeitung von Einkapselungsanforderungen
Objekt Rx { / *** rxlifecycle Bindungsdauer RxAppcompataktivität) {val rxAppcompataktivität = lifecycleProvider als rxAppcompataktivität beobachtbar.Conple observable.compose(rxFragment.bindUntilEvent(FragmentEvent.DESTROY)) } return observable .compose(HandleResult()) .onErrorResumeNext(ExceptionFunction()) } /** * Partial background requests*/ fun <T> get(observable: Observable<Response<T>>): Observable<T> { return observable .compose(HandleResult()) .onErrorresumeNext (ExceptionFunction ()) private Klasse Handleresult <T>: beobachtungstransformator <t>, t> {überschreibende Spaß anwenden (stromaufwärts <t >>): Observablesource <T> {return oberstream.flatmap {response -> createresult (Reaktion)}. .UnSubscribeon (Schedulers.io ()) .OBSERVEON (Androidschedulers.mainThread ())}} Private Fun <T> crereeSult (Antwort: Antwort <T>): Beobachtbare <T> {Return Observable.Create ({Abonnement -> if (Response). meldung sonst response.results? Definieren Sie die HTTPOBServer Unified Processing -Rendite
abstract class HttpObserver<T> : Observer<T> { /** * Tag is a special case*/ private var resultNull: Boolean = true override fun onComplete() { // Special case: OnNext will be skipped when the request is successful, but T == null, and it still needs to be processed successfully if (resultNull) onSuccess(null) } override fun ONSUBSCRICKE (D: verfügbar) {// Dialog kann hier hinzugefügt werden. Onsuccess (t: t?) / ** * Unified Processing fehlgeschlagen, z. B. Anmeldefehler usw. * @param Code * @param msg * / Open Fun OnError (Code: int, msg: String?) {}} API
Klassenergebnis {var _id: String? = null var erstellt: String? = NULL VAR DESC: String? = null var veröffentlicht: String? = NULL VAR SCRECE: String? = null var type: String? = null var url: string = "" var is verwendet: boolean = false var Wer: String? = null var bilder: list <string>? = null/*** Mädchen kleines Bild*/Fun MeizisMallurl (): String {val meizu = url return meizu Observable <Antwort <Liste <Ergebnis >>>} Objekt -API {Val Apiservice: Apiservice von Lazy {log.d ("api", "Apiservice erstellen faul") retrofitutil.retrofit.create (apiservice :: class.java)}}}}}}}}}}}}}}}}}} verwenden
Überschreiben Sie loaddata () {rx.get (api.apiService.getgank (GetType (), MintPage), this) .Subscribe (Objekt: httpobserver <list <result >> () {override Fun OnSuccess (t: list <) <) {// String?) {Super.onError (Code, msg) // getDatafailed ()}})}Der RXLIfecycle -Bindungs -Lebenszyklus wird verwendet, um mit möglichen Speicherlecks umzugehen. Fragment und Aktivität müssen die entsprechende Basisklasse von RX erben.
Übungsprogramm
Meizikt Gank.io Android Client unter Verwendung von Kotlin + renfit2 + rxjava
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.