Android-এ সমস্যা ম্যানেজ করা

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 হ্যান্ডেল করার সময়, কী সমস্যা হয়েছে তা জানতে এর 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 কিছু রিসোর্স শেষ হয়ে গেছে, সম্ভবত এর কারণ হল প্রতি ব্যবহারকারীর কোটা পূর্ণ হয়ে গেছে অথবা সম্পূর্ণ ফাইল সিস্টেমে আর জায়গা নেই। যেমন, পেট-ফিডার ডিভাইসে dispense কমান্ডের DispenseTrait কল করা হলে, কিন্তু ইউনিটে আর কোনও খাবার না থাকলে, এই সমস্যা হতে পারে।

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