تقدم هذه المقالة شرحًا مفصلاً للتعبئة البسيطة لـ Kotlin + Retrofit + Rxjava. تتم مشاركتها معك. التفاصيل كما يلي:
إعادة التثبيت
الكائن repretrofitutil {val connect_time_out = 30 // توصيل المهلة المدة x seconds val read_time_out = 30 // قراءة مهلة البيانات المدة x seconds val truction_time_out = 30 // اكتب مهلة البيانات المدة x seconds .baseurl ("http://gank.io/api/") // تستخدم هذه المقالة github API كمثال. getokhttpclient (): okhttpclient {val builder = okhttpclient.builder () builder.connectTimeOut (connect_time_out.tolong () timeUnit.seconds) if (buildConfig.debug) {builder.adDInterceptor (httploggingInterceptor (). طلب header builder.addinterceptor {chain -> val time = (system.currentTimeMillis () / 1000) .ToString () + " }} العودة إلى تغليف البيانات
استجابة الفئة <T> {var error: boolean = false var results: t؟ = null}تم استخدام واجهة برمجة تطبيقات تطوير Gank.io في العرض التوضيحي. كان تنسيق الإرجاع للمشروع العام السابق هو رمز + رسالة + T.
خطأ واجهة API/فئة معالجة موحدة
Class Apiexception: استثناء {var code: int = 0 // error code var msg: string؟ = NULL // خطأ رسائل مُنشئ (رمي: قابلة للتسمية ، رمز: int): super (throwable) {this.code = code} constructor (code: int ، msg: string) {this.code = code this.msg = msg}}تحديد الاستثناءات Functionles onerrorresumenext:
استثناء فئة استثناء من وظيفة <T>: الوظيفة <قابلة للتخفيف ، يمكن ملاحظتها <t >> {override fun application (nonnull reflable: throw): يمكن ملاحظته <T> {log.e ("استثناء function" ، reamable.message) return obsertable.error (ats internengine (). 1000 // خطأ غير معروف val analytic_server_data_error = 1001 // paste (server) خطأ في البيانات Val Connect_error = 1002 // خطأ في اتصال الشبكة Val_out_error = 1003 // network connection timeout fun handexception (e: remable): apiexception {val ex: apiexception إذا كانت apiexception) httpexception) {// http error ex = apiexception (e ، e.code ()) analytic_server_data_error) ex.msg = "خطأ parse" return ex} آخر إذا (e هو connectException) {// connect error network ex = apiexception (e ، connect_error) } آخر {// خطأ غير معروف ex = apiexception (e ، un_nowner_error) ex.msg = e.message ex}}} معالجة طلب التغليف
الكائن Rx { / *** rxlifecycle binding inivediccle* / fun <t ، e> get (يمكن ملاحظته: يمكن ملاحظته <t >> ، LifecyCleprovider: LifecyCleprovider <e>): يمكن ملاحظته <T> {// اطلب مدى الحياة للربط لمنع انخفاض الذاكرة ، وإعادة خطأ مؤهل null. rxappCompatActivity) {val rxappcompatactivitive = lifecycleprovider as rxappcompatactivity يمكن ملاحظتها. obscelable.compose (rxfragment.binduntilevent (fragmentevent.destroy))} إرجاع. .onerrorresumenext (استثناء function ())} معالجات الفئة الخاصة <T>: ObservableTransformer <Response <T> ، t> {override fun application (upstream: creatersult <t >> .UNSUBSCRICKON (SCHEDULERS.IO ()) .OBServeon (androidschedulers.mainthread ())}} متعة خاصة <T> cratereSult (الاستجابة: استجابة <T>): يمكن ملاحظتها <T> {إرجاع الاستثناءات القابلة للملاحظة. else repress.results؟ تحديد httpobserver معالجة معالجة موحدة
خلاصة الفئة httpobserver <t>: المراقب <T> { / *** العلامة هي حالة خاصة* / private var resultnull: boolean = true override fun onComplete () {// case special: onNext سيتم تخطيه عند النجاح ، ولكن t == null ، ولا يزال هناك حاجة إلى معالجتها بنجاح ( يمكن التخلص منه) {// Dialog يمكن إضافة مربع الحوار هنا} تجاوز المرح onerror (e: throwable) {if (e is apiexception) {onerror ( فشلت المعالجة الموحدة ، مثل فشل تسجيل الدخول ، إلخ. API
نتيجة الفئة {var _id: سلسلة؟ = null var createat: string؟ = null var desc: سلسلة؟ = null var publishedat: سلسلة؟ = Null var Source: String؟ = null var type: string؟ = null var url: string = "" var isused: boolean = false var who: string؟ = Null var Images: List <String>؟ = null/*** صورة فتاة صغيرة*/متعة meizismallurl (): string {val meizi = url return meizi.replace ("large" ، "small")}} واجهة Apiservice {path: "path:" int). يمكن ملاحظته <Response <list <result >>>} api {val apiservice: apiservice by lazy {log.d ("API" ، "Apiservice create lazy") retrofitutil.retrofit.create (Apiservice :: class.java)}}}} يستخدم
تجاوز fun loadData () {rx.get (api.apiservice.getGank (gettype () ، mintpage) ، هذا) .subscribe (الكائن: httpobserver <list <render>> () {تجاوز المرح onsuccess (t: list <result>؟) سلسلة؟) {super.onerror (رمز ، msg) // getDatafailed ()}})}يتم استخدام دورة حياة الربط RXLifecycle للتعامل مع تسرب الذاكرة المحتملة. الشظية والنشاط يحتاجون إلى ورث الفئة الأساسية المقابلة من RX.
برنامج التدريب
Meizikt Gank.io Android Client ، باستخدام kotlin + retrofit2 + rxjava
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.