Kotlin ไม่รองรับ Checked Exception ซึ่งช่วยลดความซับซ้อนและเพิ่มประสิทธิภาพการจัดการข้อผิดพลาด เนื่องจากคุณเลือกจัดการได้เฉพาะ Exception ที่อาจกู้คืนได้ และเนื่องจากคุณไม่ต้องจัดการทุก Exception ที่อาจเกิดขึ้นอย่างชัดเจน โค้ดจึงไม่ซับซ้อนและยังคงมุ่งเน้นไปที่วัตถุประสงค์หลัก
ความล้มเหลวที่กู้คืนได้คือปัญหาที่นักพัฒนาแอปสามารถแก้ไขได้จากฝั่งของตน
เช่น หากรหัสที่ใช้ในการเรียกไม่ถูกต้อง 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 ให้ตรวจสอบฟิลด์
error.code และ
error.message เพื่อดูว่าเกิดอะไรขึ้น นอกจากนี้ อาจมีรหัสข้อผิดพลาดย่อยด้วย
ดังนั้นให้เรียกใช้เมธอด
getSubErrorCodes() และตรวจสอบผลลัพธ์
Exception ที่ไม่ได้จัดการจะทำให้แอปขัดข้อง
ตารางต่อไปนี้แสดงความหมายของรหัส HomeException ที่คุณอาจพบ
| รหัส | ความหมาย |
|---|---|
ABORTED |
การดำเนินการถูกยกเลิก ซึ่งโดยปกติแล้วเกิดจากปัญหาการทำงานพร้อมกัน เช่น การตรวจสอบลำดับไม่สำเร็จหรือการยกเลิกธุรกรรม |
ALREADY_EXISTS |
เอนทิตีที่ไคลเอ็นต์พยายามสร้าง เช่น ไฟล์ หรือไดเรกทอรี มีอยู่แล้ว |
API_NOT_CONNECTED |
ไคลเอ็นต์พยายามเรียกใช้เมธอดจาก API ที่เชื่อมต่อไม่สำเร็จ ซึ่งอาจเกิดขึ้นเมื่ออุปกรณ์ออฟไลน์หรือไม่ รองรับ API ที่ไคลเอ็นต์พยายามเรียกใช้ |
CANCELLED |
การดำเนินการถูกยกเลิก ซึ่งโดยปกติแล้วเกิดจากผู้โทร |
COMMAND_FAILED |
คำสั่งดำเนินการไม่สำเร็จ ดูรายละเอียดเพิ่มเติมได้ในรหัสข้อผิดพลาดย่อย |
CURSOR_WINDOW_NOT_SUPPORTED |
มีการเรียกใช้เมธอดที่ใช้
CursorWindow แต่
CursorWindow ไม่ได้เปิดใช้หรือไม่ได้รับการรองรับใน
บริบทปัจจุบัน |
DATA_LOSS |
ข้อมูลสูญหายหรือเสียหายโดยกู้คืนไม่ได้ |
DEADLINE_EXCEEDED |
กำหนดเวลาหมดอายุก่อนที่การดำเนินการจะเสร็จสมบูรณ์ สำหรับการดำเนินการที่เปลี่ยนสถานะของระบบ ระบบอาจแสดงข้อผิดพลาดนี้แม้ว่าการดำเนินการจะเสร็จสมบูรณ์แล้วก็ตาม |
DECOMMISSIONING_INELIGIBLE |
การเลิกใช้งานไม่สำเร็จเนื่องจากอุปกรณ์ไม่มีสิทธิ์เลิกใช้งาน |
FAILED_PRECONDITION |
ระบบปฏิเสธการดำเนินการเนื่องจากระบบไม่ได้อยู่ในสถานะที่จำเป็นสำหรับการดำเนินการ
เช่น คุณอาจได้รับ
ข้อความนี้หากมีการเรียกใช้คำสั่ง stop ของ
OvenCavityOperationalStateTrait ใน
เตาอบที่หยุดทำงานแล้ว |
INTERNAL |
ข้อผิดพลาดภายใน ซึ่งหมายความว่าระบบย่อยได้ละเมิดข้อกำหนดบางอย่างที่คาดไว้ รหัสข้อผิดพลาดนี้สงวนไว้สำหรับ ข้อผิดพลาดร้ายแรง |
INVALID_ARGUMENT |
ไคลเอ็นต์ระบุอาร์กิวเมนต์ที่อยู่นอกช่วงค่าที่คาดไว้ของ ค่า |
INVALID_DATA_HOLDER |
ตัวยึดข้อมูลไม่ถูกต้อง |
NOT_FOUND |
ไม่พบเอนทิตีที่ขอ เช่น ไฟล์หรือไดเรกทอรี
หากระบบปฏิเสธคำขอสำหรับผู้ใช้ทั้งคลาส เช่น การเปิดตัวฟีเจอร์แบบค่อยๆ
หรือรายการที่อนุญาตพิเศษที่ไม่ได้บันทึกไว้ NOT_FOUND
อาจใช้
หากระบบปฏิเสธคำขอสำหรับผู้ใช้บางรายในคลาสของผู้ใช้
เช่น การควบคุมการเข้าถึงตามผู้ใช้ PERMISSION_DENIED
ต้องใช้ |
OUT_OF_RANGE |
มีการพยายามดำเนินการนอกช่วงที่ถูกต้อง เช่น การค้นหาหรือ
การอ่านที่เกิน end-of-file ข้อผิดพลาดนี้แตกต่างจาก
INVALID_ARGUMENT ตรงที่บ่งบอกถึงปัญหาที่อาจแก้ไขได้หากสถานะของระบบเปลี่ยนแปลง |
PERMISSION_DENIED |
ผู้โทรไม่มีสิทธิ์ดำเนินการที่ระบุ
PERMISSION_DENIED ห้ามใช้สำหรับการปฏิเสธที่เกิดจากการใช้ทรัพยากรบางอย่างจนหมด (ใช้ RESOURCE_EXHAUSTED สำหรับข้อผิดพลาดเหล่านั้น)
PERMISSION_DENIED ต้องไม่ถูกใช้หากระบุตัวตนของผู้โทรไม่ได้ (ใช้ UNAUTHENTICATED สำหรับข้อผิดพลาดเหล่านั้น)
รหัสข้อผิดพลาดนี้ไม่ได้หมายความว่าคำขอถูกต้องหรือเอนทิตีที่ขอมีอยู่หรือเป็นไปตามเงื่อนไขเบื้องต้นอื่นๆ
|
RESOURCE_EXHAUSTED |
ทรัพยากรบางอย่างหมดลงแล้ว ซึ่งอาจเป็นเพราะถึงโควต้าต่อผู้ใช้
หรือระบบไฟล์ทั้งหมดไม่มีพื้นที่เหลือ
เช่น ระบบอาจแสดงข้อผิดพลาดนี้หากมีการเรียกใช้คำสั่ง
dispense ของ
DispenseTrait ในอุปกรณ์ให้อาหารสัตว์เลี้ยง แต่ไม่มีอาหารเหลืออยู่ในเครื่องนอกจากนี้ ยังอาจเกิดจากการเกินโควต้าโปรเจ็กต์ Home API ดูข้อมูลเพิ่มเติมได้ที่ การจัดการโควต้า |
SDK_INITIALIZATION_MISSING_INFO |
มีการเริ่มต้น SDK โดยไม่มีข้อมูลที่จำเป็นทั้งหมด
เช่น ระบบจะแสดงข้อผิดพลาดนี้หากไคลเอ็นต์พยายาม
รับ TraitFactory สำหรับรหัสลักษณะที่กำหนด แต่ไม่ได้รวมลักษณะดังกล่าวไว้เมื่อเริ่มต้น SDK ดูหัวข้อ
เริ่มต้นใช้งาน Home บน Android |
UNAUTHENTICATED |
ระบุตัวตนของผู้โทรไม่ได้หรือคำขอไม่มีข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์ที่ถูกต้อง |
UNAVAILABLE |
บริการไม่พร้อมใช้งาน ซึ่งส่วนใหญ่แล้วเป็นสถานการณ์ชั่วคราว ที่แก้ไขได้โดยการลองอีกครั้งด้วยการหน่วงเวลา โปรดทราบว่า การลองการดำเนินการที่ไม่ใช่ Idempotent อีกครั้งอาจไม่ปลอดภัยเสมอไป |
UNIMPLEMENTED |
บริการนี้ไม่ได้ใช้ ไม่รองรับ หรือไม่ได้เปิดใช้การดำเนินการที่ขอใน บริการนี้ |
UNKNOWN |
ข้อผิดพลาดที่ไม่รู้จัก UNKNOWN จะปรากฏขึ้นเมื่อเกิดสถานการณ์ข้อผิดพลาด
ที่ไม่สามารถจัดประเภทโดยใช้รหัสข้อผิดพลาดอื่นๆ ได้
เช่น ระบบอาจแสดงข้อผิดพลาดนี้เมื่อค่าสถานะที่ได้รับ
จาก API ภายนอกมีข้อมูลไม่เพียงพอ
เกี่ยวกับสาเหตุหลัก |
WRITE_FAILED |
การเขียนดำเนินการไม่สำเร็จ ดูรายละเอียดเพิ่มเติมได้ในรหัสข้อผิดพลาดย่อย |