Kotlin ไม่รองรับข้อยกเว้นที่ตรวจสอบแล้ว วิธีนี้ช่วยให้การจัดการข้อผิดพลาดง่ายและมีประสิทธิภาพมากขึ้น เนื่องจากคุณเลือกจัดการเฉพาะข้อยกเว้นที่มีโอกาสกู้คืนได้ และเนื่องจากคุณไม่จำเป็นต้องจัดการข้อยกเว้นที่เป็นไปได้ทั้งหมดอย่างชัดแจ้ง โค้ดของคุณจึงมีความกระชับมากขึ้นและยังคงมุ่งเน้นที่วัตถุประสงค์หลักได้
ความล้มเหลวที่แก้ไขได้คือปัญหาที่นักพัฒนาแอปแก้ไขได้
เช่น หากรหัสที่ใช้ในการเรียกไม่ถูกต้อง API จะแสดงHomeException
พร้อมข้อความ invalid data
จากนั้นนักพัฒนาแอปจะเลือกนำรหัสดังกล่าวออกจากแคชหรือแสดงข้อความ "ไม่พบโครงสร้าง" แก่ผู้ใช้ก็ได้
ตัวอย่างวิธีจัดการกับข้อผิดพลาดที่แก้ไขได้
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
เมธอดใดก็ตามใน Home API อาจแสดง HomeException
เราจึงขอแนะนำให้คุณใช้บล็อก try-catch
เพื่อจับ HomeException
ในการเรียกใช้ทั้งหมด
เมื่อจัดการ HomeException
ให้ตรวจสอบฟิลด์ code
และ message
เพื่อดูว่าเกิดข้อผิดพลาดอะไรขึ้น
ข้อยกเว้นที่ไม่ได้รับการจัดการจะทำให้แอปขัดข้อง
ตารางต่อไปนี้แสดงความหมายของรหัส HomeException
ที่คุณอาจพบ
รหัส | ความหมาย |
---|---|
ABORTED |
การดำเนินการถูกยกเลิก ข้อผิดพลาดนี้มักปรากฏขึ้นเมื่อมีปัญหาเกี่ยวกับการทำงานพร้อมกัน เช่น การตรวจสอบลําดับไม่สําเร็จหรือการยกเลิกธุรกรรม |
ALREADY_EXISTS |
มีทรัพยากรหรือเอนทิตีที่คุณพยายามสร้างอยู่แล้ว เช่น กำหนดเวลาที่มีชื่อสำหรับตัวควบคุมอุณหภูมิ |
API_NOT_CONNECTED |
ไคลเอ็นต์พยายามเรียกเมธอดจาก API ที่เชื่อมต่อไม่สำเร็จ ซึ่งอาจเกิดขึ้นเมื่ออุปกรณ์ออฟไลน์หรือไม่รองรับ API ที่คุณพยายามเรียกใช้ |
CANCELLED |
การดำเนินการถูกยกเลิก โดยปกติแล้วผู้โทรจะเป็นผู้ยกเลิก |
DATA_LOSS |
ข้อมูลสูญหายโดยกู้คืนไม่ได้หรือข้อมูลเสียหาย |
DEADLINE_EXCEEDED |
กำหนดเวลาหมดอายุก่อนที่การดำเนินการจะเสร็จสมบูรณ์ สําหรับการดําเนินการที่เปลี่ยนสถานะของระบบ ระบบอาจแสดงข้อผิดพลาดนี้แม้ว่าการดําเนินการจะเสร็จสมบูรณ์แล้วก็ตาม |
FAILED_PRECONDITION |
ระบบปฏิเสธการดำเนินการเนื่องจากไม่ได้อยู่ในสถานะที่จําเป็นต่อการดําเนินการ ตัวอย่างเช่น คุณอาจได้รับข้อความนี้หากเรียกใช้ stop ในเตาอบที่หยุดทำงานแล้ว |
INTERNAL |
ข้อผิดพลาดภายใน ซึ่งหมายความว่าอินตัวแปรคงที่บางรายการที่ระบบพื้นฐานคาดไว้ใช้งานไม่ได้ รหัสข้อผิดพลาดนี้สงวนไว้สำหรับข้อผิดพลาดร้ายแรง |
INVALID_ARGUMENT |
คุณระบุอาร์กิวเมนต์ที่อยู่นอกช่วงที่คาดไว้ของค่า |
NOT_FOUND |
คุณระบุเอนทิตีหรือทรัพยากรที่ระบบไม่พบ เช่น การระบุรหัสแทร็กที่ไม่มีอยู่เมื่อเรียกใช้
activateAudioTrack ในอุปกรณ์โปรแกรมเล่นสื่อ |
OUT_OF_RANGE |
พารามิเตอร์อยู่นอกช่วงที่ถูกต้องตามสถานะปัจจุบันของระบบ ข้อความนี้จะแสดงขึ้นเมื่อค่าอยู่ในช่วงของค่าที่การเรียก API อาจยอมรับได้ แต่ไม่เหมาะสมในบริบทปัจจุบัน |
PERMISSION_DENIED |
คุณไม่มีสิทธิ์ดำเนินการที่ระบุ รหัสข้อผิดพลาดนี้ไม่ได้หมายความว่าคำขอนั้นถูกต้อง |
RESOURCE_EXHAUSTED |
ทรัพยากรบางส่วนหมดแล้ว ตัวอย่างเช่น ระบบอาจแสดงข้อผิดพลาดนี้เมื่อมีคนเรียกใช้
dispense ในอุปกรณ์ที่ป้อนอาหารสัตว์และไม่มีอาหารเหลืออยู่ในเครื่อง |
SDK_INITIALIZATION_MISSING_INFO |
SDK ยังไม่เริ่มต้นใช้งานอย่างสมบูรณ์ ตัวอย่างเช่น คุณจะได้รับข้อความนี้หากพยายามรับ TraitFactory สำหรับลักษณะที่ยังไม่ได้ลงทะเบียน ดูการเริ่มต้น |
UNAUTHENTICATED |
ไม่สามารถระบุตัวผู้ที่โทรเข้ามา หรือคําขอไม่มีข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์ที่ถูกต้อง |
UNAVAILABLE |
บริการไม่พร้อมให้บริการ ปัญหานี้อาจเกิดจากเงื่อนไขชั่วคราว ซึ่งแก้ไขได้ด้วยการลองอีกครั้งโดยลดจำนวน โปรดทราบว่าการลองดำเนินการแบบไม่ซ้ำกันอีกครั้งอาจไม่ปลอดภัยเสมอไป |
UNIMPLEMENTED |
การดำเนินการที่ขอนั้นไม่มีการใช้งาน ไม่รองรับ หรือไม่ได้เปิดใช้ในบริการนี้ |
UNKNOWN |
ข้อผิดพลาดที่ไม่รู้จัก โดยทั่วไปแล้ว UNKNOWN จะปรากฏขึ้นเมื่อเกิดข้อผิดพลาดที่ไม่สามารถจัดประเภทโดยใช้รหัสข้อผิดพลาดอื่นๆ ตัวอย่างเช่น ระบบอาจแสดงข้อผิดพลาดนี้เมื่อได้รับค่าสถานะจาก API ภายนอกที่ไม่มีข้อมูลเพียงพอเกี่ยวกับสาเหตุที่แท้จริง |