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

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

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

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

val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }

হোম এপিআই-এর যেকোন পদ্ধতি একটি HomeException নিক্ষেপ করতে পারে, তাই আমরা সুপারিশ করি যে আপনি সমস্ত কলে HomeException ধরতে একটি try-catch ব্লক ব্যবহার করুন।

HomeException পরিচালনা করার সময়, কী ভুল হয়েছে তা জানতে এর code এবং message ক্ষেত্রগুলি পরীক্ষা করুন৷

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

নিম্নলিখিত টেবিলটি HomeException কোডগুলির অর্থ প্রদান করে যা আপনি সম্মুখীন হতে পারেন:

টেবিল: HomeException কোড
কোড অর্থ
ABORTED অপারেশনটি স্থগিত করা হয়েছিল, সাধারণত একটি সিকোয়েন্সার চেক ব্যর্থতা বা লেনদেন বাতিলের মতো একযোগে সমস্যার কারণে।
ALREADY_EXISTS একটি ক্লায়েন্ট যে সত্তা তৈরি করার চেষ্টা করেছে, যেমন একটি ফাইল বা ডিরেক্টরি, ইতিমধ্যেই বিদ্যমান।
API_NOT_CONNECTED ক্লায়েন্ট একটি API থেকে একটি পদ্ধতি কল করার চেষ্টা করেছে যা সংযোগ করতে ব্যর্থ হয়েছে৷ এটি ঘটতে পারে যখন ডিভাইসটি অফলাইনে থাকে বা ক্লায়েন্ট কল করার চেষ্টা করে এমন API সমর্থন করে না।
CANCELLED অপারেশনটি বাতিল করা হয়েছে, সাধারণত কলার দ্বারা।
DATA_LOSS অপুনরুদ্ধারযোগ্য ডেটা হারানো বা দুর্নীতি হয়েছে।
DEADLINE_EXCEEDED অপারেশন শেষ হওয়ার আগেই সময়সীমা শেষ হয়ে গেছে। সিস্টেমের অবস্থা পরিবর্তন করে এমন অপারেশনগুলির জন্য, অপারেশনটি সফলভাবে সম্পন্ন হলেও এই ত্রুটিটি ফেরত দেওয়া হতে পারে।
FAILED_PRECONDITION অপারেশনটি প্রত্যাখ্যান করা হয়েছে কারণ অপারেশনটি কার্যকর করার জন্য সিস্টেমটি প্রয়োজনীয় অবস্থায় নেই৷ উদাহরণস্বরূপ, আপনি এই বার্তাটি পেতে পারেন যদি OvenCavityOperationalStateTrait এর stop কমান্ডটি ইতিমধ্যেই বন্ধ হয়ে যাওয়া ওভেনে কল করা হয়, অথবা আপনি যদি একটি অ-ডিরেক্টরিতে একটি rmdir অপারেশন চালানোর চেষ্টা করেন।
INTERNAL অভ্যন্তরীণ ত্রুটি. এর মানে হল যে অন্তর্নিহিত সিস্টেমের দ্বারা প্রত্যাশিত কিছু invariants ভেঙে গেছে। এই ত্রুটি কোড গুরুতর ত্রুটির জন্য সংরক্ষিত.
INVALID_ARGUMENT ক্লায়েন্ট একটি যুক্তি প্রদান করেছে যা মানগুলির প্রত্যাশিত পরিসরের বাইরে।
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 থেকে প্রাপ্ত একটি স্থিতি মান মূল কারণ হিসাবে যথেষ্ট তথ্যের অভাব রয়েছে৷