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