অ্যান্ড্রয়েডে সমস্যা হ্যান্ডলিং

কোটলিন চেক্ট এক্সেপশন সমর্থন করে না। এটি এরর হ্যান্ডলিংকে সহজ ও সুবিন্যস্ত করে, কারণ আপনি কেবল সেই এক্সেপশনগুলোই হ্যান্ডেল করতে পারেন যেগুলো থেকে পুনরুদ্ধার সম্ভব। আর যেহেতু আপনাকে প্রতিটি সম্ভাব্য এক্সেপশনকে স্পষ্টভাবে হ্যান্ডেল করতে হয় না, তাই আপনার কোড কম জঞ্জালপূর্ণ থাকে এবং ফলস্বরূপ, এটি তার মূল উদ্দেশ্যের উপর আরও বেশি মনোনিবেশ করতে পারে।

পুনরুদ্ধারযোগ্য ব্যর্থতা হলো এমন সমস্যা যা একজন ডেভেলপার তার নিজের দিক থেকে সমাধান করতে পারেন। উদাহরণস্বরূপ, যদি কোনো কলে ব্যবহৃত আইডি বৈধ না হয়, তাহলে এপিআইটি একটি invalid data বার্তা সহ একটি HomeException থ্রো করে। এরপর অ্যাপ ডেভেলপার সেই আইডিটি তার ক্যাশ থেকে মুছে ফেলতে পারেন অথবা ব্যবহারকারীকে "স্ট্রাকচার পাওয়া যায়নি"-এর মতো একটি বার্তা দেখাতে পারেন।

পুনরুদ্ধারযোগ্য ব্যর্থতা কীভাবে সামাল দেওয়া যেতে পারে তার একটি উদাহরণ:

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 কোডগুলির অর্থ দেওয়া হলো, যেগুলোর সম্মুখীন আপনি হতে পারেন:

সারণি: HomeException কোড
কোড অর্থ
ABORTED অপারেশনটি বাতিল করা হয়েছিল, সাধারণত কনকারেন্সি সংক্রান্ত কোনো সমস্যার কারণে, যেমন সিকোয়েন্সার চেক ব্যর্থতা বা ট্রানজ্যাকশন বাতিল হওয়া।
ALREADY_EXISTS ক্লায়েন্ট যে সত্তাটি তৈরি করার চেষ্টা করেছে, যেমন একটি ফাইল বা ডিরেক্টরি, সেটি ইতিমধ্যেই বিদ্যমান।
API_NOT_CONNECTED ক্লায়েন্ট এমন একটি এপিআই (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 কমান্ডটি কল করা হয়, কিন্তু ইউনিটটিতে আর কোনো খাবার অবশিষ্ট না থাকে।

হোম এপিআই প্রকল্পের কোটা অতিক্রম করার কারণেও এটি হতে পারে। আরও তথ্যের জন্য, কোটা ব্যবস্থাপনা দেখুন।
SDK_INITIALIZATION_MISSING_INFO প্রয়োজনীয় সমস্ত তথ্য ছাড়াই SDK-টি ইনিশিয়ালাইজ করা হয়েছিল। উদাহরণস্বরূপ, ক্লায়েন্ট যদি কোনো নির্দিষ্ট ট্রেইট আইডির জন্য একটি TraitFactory পেতে চেষ্টা করে, কিন্তু SDK ইনিশিয়ালাইজ করার সময় ট্রেইটটি অন্তর্ভুক্ত করা না থাকে, তাহলে এই এররটি আসে। অ্যান্ড্রয়েডে হোম ইনিশিয়ালাইজ করা দেখুন।
UNAUTHENTICATED আহ্বানকারীকে শনাক্ত করা যাচ্ছে না অথবা অনুরোধটিতে বৈধ প্রমাণীকরণ তথ্য নেই।
UNAVAILABLE পরিষেবাটি অনুপলব্ধ। এটি সম্ভবত একটি সাময়িক অবস্থা, যা ব্যাকঅফ সহ পুনরায় চেষ্টা করে ঠিক করা যেতে পারে। মনে রাখবেন যে নন-আইডেমপোটেন্ট অপারেশনগুলো পুনরায় চেষ্টা করা সবসময় নিরাপদ নয়।
UNIMPLEMENTED অনুরোধকৃত অপারেশনটি এই পরিষেবাতে বাস্তবায়িত, সমর্থিত বা সক্রিয় করা নেই।
UNKNOWN অজানা ত্রুটি। যখন এমন কোনো ত্রুটি ঘটে যা অন্য কোনো ত্রুটি কোড ব্যবহার করে শ্রেণীবদ্ধ করা যায় না, তখন UNKNOWN প্রদর্শিত হয়। উদাহরণস্বরূপ, কোনো বাহ্যিক API থেকে প্রাপ্ত স্ট্যাটাস ভ্যালুতে মূল কারণ সম্পর্কে পর্যাপ্ত তথ্য না থাকলে এই ত্রুটিটি প্রদর্শিত হতে পারে।
WRITE_FAILED রাইটটি কার্যকর করা যায়নি। আরও বিস্তারিত জানতে সাব-এরর কোডগুলো দেখুন।