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 থ্রো করতে পারে, তাই আমরা সাজেস্ট করি যে আপনি সব কলে HomeException ক্যাচ করতে
try-catch ব্লক ব্যবহার করুন।
HomeException হ্যান্ডেল করার সময়, কী সমস্যা হয়েছে তা জানতে এর
error.code এবং
error.message ফিল্ড চেক করুন। এছাড়াও, সাব-এরর কোড
থাকতে পারে, তাই
getSubErrorCodes() পদ্ধতি কল করুন এবং ফলাফল চেক করুন।
কোনও হ্যান্ডেল না করা ব্যতিক্রমের ফলে আপনার অ্যাপ ক্র্যাশ করবে।
নিচের সারণীতে HomeException কোডের অর্থ দেওয়া হল যা আপনি
দেখতে পেতে পারেন:
| কোড | অর্থ |
|---|---|
ABORTED |
অপারেশনটি বাতিল করা হয়েছে, সাধারণত কনকারেন্সি সংক্রান্ত সমস্যার কারণে যেমন সিকোয়েন্সার চেক ব্যর্থতা বা ট্রানজ্যাকশন বাতিল করা। |
ALREADY_EXISTS |
The entity that a client attempted to create, for example a file or directory, already exists. |
API_NOT_CONNECTED |
ক্লায়েন্ট এমন একটি API থেকে পদ্ধতি কল করার চেষ্টা করেছে যা কানেক্ট করতে পারেনি। ডিভাইস অফলাইন থাকলে বা ক্লায়েন্ট যে API কল করার চেষ্টা করেছে সেটি কাজ না করলে এটি হতে পারে। |
CANCELLED |
অপারেশন বাতিল করা হয়েছে, সাধারণত কলার এটি করেন। |
COMMAND_FAILED |
কমান্ডটি এক্সিকিউট করা যায়নি। আরও বিবরণের জন্য সাব-এরর কোড চেক করুন। |
CURSOR_WINDOW_NOT_SUPPORTED |
এমন একটি পদ্ধতি কল করা হয়েছে যা
CursorWindow ব্যবহার করে, কিন্তু
বর্তমান প্রসঙ্গে CursorWindow চালু নেই অথবা
কাজ করে না। |
DATA_LOSS |
ডেটা ফিরিয়ে আনা যাবে না বা ডেটা নষ্ট হয়ে গেছে। |
DEADLINE_EXCEEDED |
কাজটি সম্পূর্ণ হওয়ার আগেই সময়সীমা শেষ হয়ে গেছে। যেসব অপারেশন সিস্টেমের স্ট্যাটাস পরিবর্তন করে, সেইসব ক্ষেত্রে অপারেশন সম্পূর্ণ হলেও এই সমস্যা দেখা দিতে পারে। |
DECOMMISSIONING_INELIGIBLE |
ডিকমিশন করা যায়নি কারণ ডিভাইসটি ডিকমিশন করার জন্য উপযুক্ত নয়। |
FAILED_PRECONDITION |
অপারেশনটি বাতিল করা হয়েছে কারণ সিস্টেমটি এমন অবস্থায় নেই
যা অপারেশনটি কার্যকর করার জন্য প্রয়োজন। যেমন, আপনি এই মেসেজ পেতে পারেন যদি
OvenCavityOperationalStateTrait-এর stop কমান্ড
এমন একটি ওভেনে কল করা হয়
যা আগে থেকেই বন্ধ হয়ে গেছে। |
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 |
কিছু রিসোর্স শেষ হয়ে গেছে, সম্ভবত ব্যবহারকারী প্রতি কোটা
শেষ হয়ে গেছে অথবা সম্পূর্ণ ফাইল সিস্টেমে আর কোনও জায়গা নেই।
যেমন, এই সমস্যা হতে পারে যদি
DispenseTrait-এর
dispense কমান্ড কোনও পেট-ফিডার ডিভাইসে কল করা হয় কিন্তু
ইউনিটে আর কোনও খাবার অবশিষ্ট না থাকে।Home API প্রোজেক্ট কোটা পেরিয়ে যাওয়ার কারণেও এটি হতে পারে। আরও তথ্যের জন্য, কোটা ম্যানেজমেন্ট দেখুন। |
SDK_INITIALIZATION_MISSING_INFO |
প্রয়োজনীয় সব তথ্য ছাড়াই SDK শুরু করা হয়েছে।
যেমন, ক্লায়েন্ট কোনও নির্দিষ্ট ট্রেট আইডির জন্য TraitFactory পাওয়ার চেষ্টা করলে
এই সমস্যা হয়, কিন্তু SDK ইনিশিয়ালাইজ করার সময়
ট্রেট অন্তর্ভুক্ত করা হয়নি। Android-এ হোম ইনিশিয়ালাইজ করুন
দেখুন। |
UNAUTHENTICATED |
কলারের পরিচয় শনাক্ত করা যায়নি অথবা অনুরোধে সঠিক যাচাইকরণ সংক্রান্ত ক্রেডেনশিয়াল নেই। |
UNAVAILABLE |
পরিষেবা উপলভ্য নেই। এটি সম্ভবত একটি ক্ষণস্থায়ী পরিস্থিতি, যা ব্যাকঅফ সহ আবার চেষ্টা করে সংশোধন করা যেতে পারে। মনে রাখবেন যে নন-আইডেমপোটেন্ট অপারেশন আবার চেষ্টা করা সবসময় নিরাপদ নয়। |
UNIMPLEMENTED |
অনুরোধ করা অপারেশন এই পরিষেবায় প্রয়োগ করা, কাজ করা বা চালু করা হয়নি। |
UNKNOWN |
অজানা সমস্যা। UNKNOWN তখনই দেখা যায় যখন এমন কোনও সমস্যা
হয় যা অন্য কোনও সমস্যার কোড ব্যবহার করে শ্রেণীবদ্ধ করা যায় না।
যেমন, কোনও এক্সটার্নাল API থেকে পাওয়া স্ট্যাটাস ভ্যালুতে
মূল কারণ সম্পর্কে পর্যাপ্ত তথ্য না থাকলে
এই সমস্যা হতে পারে। |
WRITE_FAILED |
রাইট এক্সিকিউট করা যায়নি। আরও বিবরণের জন্য সাব-এরর কোড চেক করুন। |