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 থ্রো করতে পারে, তাই আমরা সাজেস্ট করি যে আপনি সব কলে HomeException ক্যাচ করতে try-catch ব্লক ব্যবহার করুন।

HomeException হ্যান্ডেল করার সময়, কী সমস্যা হয়েছে তা জানতে এর error.code এবং error.message ফিল্ড চেক করুন। এছাড়াও, সাব-এরর কোড থাকতে পারে, তাই getSubErrorCodes() পদ্ধতি কল করুন এবং ফলাফল চেক করুন।

কোনও হ্যান্ডেল না করা ব্যতিক্রমের ফলে আপনার অ্যাপ ক্র্যাশ করবে।

নিচের সারণীতে HomeException কোডের অর্থ দেওয়া হল যা আপনি দেখতে পেতে পারেন:

টেবিল: 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 রাইট এক্সিকিউট করা যায়নি। আরও বিবরণের জন্য সাব-এরর কোড চেক করুন।