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

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

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