บทความนี้แนะนำคำอธิบายโดยละเอียดเกี่ยวกับบรรจุภัณฑ์ง่ายๆของ Kotlin + ติดตั้งเพิ่มเติม + Rxjava มันถูกแบ่งปันกับคุณ รายละเอียดมีดังนี้:
อินสแตนซ์ติดตั้งติดตั้ง
Object retrofitutil {val connect_time_out = 30 // การเชื่อมต่อการหมดเวลาระยะเวลา x วินาที val read_time_out = 30 // อ่านข้อมูลการหมดเวลาข้อมูล x วินาทีวินาที val _time_out = 30 // เขียนระยะเวลาการหมดเวลา .baseurl ("http://gank.io/api/") // บทความนี้ใช้ GitHub API เป็นตัวอย่าง AddConverterterTory (GSONCONVERTORTORY.CREATE ()) getOkhttpClient (): okhttpClient {val builder = okhttpClient.builder () builder.connecttimeout (connect_time_out.tolong (), timeunit.seconds) .writetimeout TimeUnit.seconds) ถ้า (buildConfig.debug) {builder.addInterceptor (httploggingInterceptor (). setlevel (httplogginginterceptor.level.body)} else {builder.addinterceptor request header builder.addinterceptor {chain -> val time = (system.currentTimeMillis () / 1000) .toString () + "" Val RequestBuilder = chain.request (). newBuilder () requestbuilder.addheader ("เวลา" - กลับไปที่การห่อหุ้มข้อมูล
การตอบสนองของคลาส <t> {ข้อผิดพลาด var: boolean = false var ผลลัพธ์: t? = null}การพัฒนา API ของ gank.io ถูกนำมาใช้ในการสาธิต รูปแบบการส่งคืนของโครงการทั่วไปก่อนหน้านี้คือ Code + Message + T รูปแบบ
ข้อผิดพลาดของอินเตอร์เฟส API/ข้อยกเว้นระดับการจัดการแบบครบวงจร
คลาส apiexception: ข้อยกเว้น {var code: int = 0 // รหัสข้อผิดพลาด var msg: string? = null // ข้อความแสดงข้อผิดพลาด constructor (throwable: throwable, code: int): super (throwable) {this.code = code} constructor (รหัส: int, msg: string) {this.code = code this.msg = msg}}}กำหนดมือจับ ExceptionFunction onerrorresumenext:
Class ExceptionFunction <t>: ฟังก์ชั่น <throwable, สามารถสังเกตได้ <t>> {แทนที่ความสนุกใช้ (@nonnull throwable: thingable): สังเกตได้ <t> {log.e ("ExceptionFunction", throwable.message) return.error.error (ExceptionEngine () 1000 // ข้อผิดพลาดที่ไม่รู้จัก val analytic_server_data_error = 1001 // วาง (เซิร์ฟเวอร์) ข้อผิดพลาดข้อมูล val connect_error = 1002 // การเชื่อมต่อเครือข่ายข้อผิดพลาด val time_out_error = 1003 // การเชื่อมต่อการเชื่อมต่อเครือข่ายความสนุก httpexception) {// http error ex = apiexception (e, e.code ()) ex.msg = "ความผิดพลาดของเครือข่าย:" + ex.code return ex} อื่นถ้า (e คือ jsonparseexception || e คือ jSonexception || e analytic_server_data_error) ex.msg = "ข้อผิดพลาดการแยกวิเคราะห์" return ex} else ถ้า (e connectexception) {// เชื่อมต่อข้อผิดพลาดเครือข่าย ex = apiexception (e, connect_error) ex.msg = "การเชื่อมต่อล้มเหลว return ex} else {// ข้อผิดพลาดที่ไม่รู้จัก ex = apiexception (e, un_nown_erndror) ex.msg = e.message return ex}}}} การประมวลผลคำขอห่อหุ้ม
Object rx { / *** rxlifecycle ผูกพัน Lifecycle* / fun <t, e> get (สังเกตได้: สังเกตได้ <ตอบสนอง <t>>, LifecycleProvider: LifecycleProvider <e>): สามารถสังเกตได้ rxAppCompatactivity) {val rxappcompatactivity = LifecycleProvider เป็น rxAppCompatactivity ที่สังเกตได้ compose (rxAppCompatactivity.binduntileVent (activityEvent.destroy)} ถ้า สังเกตได้โคพอส (rxfragment.binduntilevent (fragmentevent.destroy))} return สามารถสังเกตได้. compose (handleresult ()) .onerrorresumenext (ExceptionFunction ())} / *** การร้องขอพื้นหลังบางส่วน .onerrorresumenext (ExceptionFunction ())} คลาสส่วนตัว handleresult <t>: nobedableTransformer <การตอบสนอง <t>, t> {Override Fun ใช้ (upstream: สังเกตได้ <t >>): ObservableSource <t> {return upstream.flatmap .unsubscribeonon (schedulers.io ()) .observeon (Androidschedulers.MainThread ())}} ความสนุกส่วนตัว <T> createResult (การตอบสนอง: การตอบสนอง <t>): สังเกตได้ <t> {กลับมาสังเกตได้ และข้อความตอบกลับอื่น ๆ ? กำหนดผลตอบแทนการประมวลผลแบบ Unified Httpobserver Unified
บทคัดย่อคลาส Httpobserver <t>: Observer <t> { / *** แท็กเป็นกรณีพิเศษ* / private var resultnull: boolean = true แทนที่ความสนุก oncomplete () {// กรณีพิเศษ: onnext จะถูกข้ามไป onsubscribe (d: disposerive) {// กล่องโต้ตอบสามารถเพิ่มได้ที่นี่} แทนที่ความสนุก onerror (e: throwable) {ถ้า (e คือ apiexception) {onerror (e.code, e.msg)} else {onerror (0, e.message)} onsuccess (t: t?) / ** * การประมวลผลแบบครบวงจรล้มเหลวเช่นความล้มเหลวในการเข้าสู่ระบบ ฯลฯ * @param code * @param msg * / เปิด fun onerror (รหัส: int, msg: string?) {}}} API
ผลลัพธ์ของคลาส {var _id: สตริง? = null var createDat: สตริง? = null var desc: สตริง? = NULL VAR ที่เผยแพร่: สตริง? = แหล่งที่มา null var: สตริง? = ประเภท null var: สตริง? = null var url: string = "" var isused: boolean = false var ใคร: สตริง? = ภาพ NULL VAR: รายการ <String>? = null/*** ภาพเล็ก ๆ ของสาว*/fun meizismallurl (): สตริง {val meizi = url return meizi.replace ("ใหญ่", "เล็ก")}} อินเตอร์เฟส apiservice {@get ("data/{type}/10/}" สังเกตได้ <ตอบกลับ <list <result>>>} Object api {val apiservice: apiservice โดย lazy {log.d ("api", "apiservice สร้างขี้เกียจ") retrofitutil.retrofit.create (apiservice :: class.java)}}}}}}}}} ใช้
แทนที่ fun loaddata () {rx.get (api.apiservice.getGank (getType (), mintpage), นี่). subscribe (วัตถุ: httpobserver <list <result>> msg: string?) {super.onerror (รหัส, msg) // getDatafailed ()}})}วงจรชีวิตที่มีผลผูกพัน RXlifecycle ใช้เพื่อจัดการกับการรั่วไหลของหน่วยความจำที่เป็นไปได้ ชิ้นส่วนและกิจกรรมจำเป็นต้องสืบทอดคลาสฐานที่สอดคล้องกันของ RX
โปรแกรมฝึกหัด
ไคลเอนต์ meizikt gank.io android โดยใช้ kotlin + retrofit2 + rxjava
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น