এক নজরে ত্রুটিগুলি পরিচালনা করুন

অ্যান্ড্রয়েড ১৫ থেকে গ্ল্যান্সে ত্রুটি পরিচালনা উন্নত করার জন্য এপিআই বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে। এই পৃষ্ঠাটি এই এপিআইগুলো সম্পর্কিত সর্বোত্তম অনুশীলনগুলো প্রদান করে।

অ-কম্পোজেবল কম্পোনেন্টগুলোর চারপাশে একটি try-catch ব্লক ব্যবহার করুন।

কম্পোজেবল অবজেক্টের চারপাশে ট্রাই-ক্যাচ ব্লক ব্যবহারের অনুমতি কম্পোজে নেই, কিন্তু এটি আপনার অ্যাপের অন্যান্য লজিককে এই ব্লকগুলোর মধ্যে র‍্যাপ করার সুযোগ দেয়। এর ফলে আপনি আপনার এরর ভিউয়ের জন্যও কম্পোজ ব্যবহার করতে পারেন, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:

provideContent {
       var isError = false;
       var data = null
       try {
           val repository = (context.applicationContext as MyApplication).myRepository
           data = repository.loadData()
       } catch (e: Exception) {
           isError = true;
           //handleError
       }

       if (isError) {
           ErrorView()
       } else {
           Content(data)
       }
   }

ডিফল্ট ত্রুটি লেআউট

যদি কোনো আনক্যাচড এক্সেপশন বা কম্পোজ এরর থাকে, তাহলে গ্ল্যান্স একটি ডিফল্ট এরর লেআউট প্রদর্শন করে:

একটি ত্রুটি বার্তা যা ত্রুটির ধরণ দেখায় এবং এটি কোথায় খুঁজতে হবে তার একটি পরামর্শ দেয়।
চিত্র ১. গ্লান্স ১.০-এর ডিফল্ট এরর লেআউট
'কন্টেন্ট দেখানো যাচ্ছে না' লেখা সহ একটি বক্স
চিত্র ২. গ্লান্স ১.১.০-এর ডিফল্ট এরর লেআউট

কম্পোজিশন ব্যর্থ হলে, গ্লান্স ডেভেলপারদের একটি ফলব্যাক হিসেবে এক্সএমএল লেআউট প্রদান করার সুযোগ দেয়। এর মানে হলো, কম্পোজ কোডে কোনো ত্রুটি ছিল। আপনার অ্যাপের কোডে কোনো আনক্যাচড এরর থাকলেও এই এরর UI প্রদর্শিত হয়।

class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout)

এই লেআউটটি একটি স্থির লেআউট, যার সাথে আপনার ব্যবহারকারী কোনো মিথস্ক্রিয়া করতে পারবেন না, কিন্তু জরুরি পরিস্থিতিতে এটি উপযোগী।

ত্রুটির বার্তা প্রদর্শনের জন্য এতে একটি শিরোনাম এবং একটি টেক্সট ফিল্ড রয়েছে।
চিত্র ৩. কাস্টম ত্রুটি লেআউটের উদাহরণ

ডিফল্ট ত্রুটি UI-তে অ্যাকশন যোগ করুন

Glance 1.1.0 সংস্করণ থেকে, আপনি ডিফল্ট এরর হ্যান্ডলিং কোড ওভাররাইড করতে পারবেন। এর মাধ্যমে, কম্পোজিশনে কোনো আনক্যাচড এক্সেপশন বা এরর ঘটলে আপনি অ্যাকশন কলব্যাক যোগ করতে পারবেন।

এই বৈশিষ্ট্যটি ব্যবহার করতে, onCompositionError() ফাংশনটি ওভাররাইড করুন:

GlanceAppWidget.onCompositionError(
    context: Context,
    glanceId: GlanceId,
    appWidgetId: Int,
    throwable: Throwable
)

এই ফাংশনে, ত্রুটি ব্যবস্থাপনার জন্য Glance, RemoteViews API-এর উপর নির্ভর করে। এর মাধ্যমে আপনি XML ব্যবহার করে লেআউট এবং অ্যাকশন হ্যান্ডলার নির্দিষ্ট করতে পারেন।

নিম্নলিখিত উদাহরণগুলি আপনাকে ধাপে ধাপে দেখাবে, কীভাবে প্রতিক্রিয়া পাঠানোর জন্য একটি বাটন সহ একটি ত্রুটি UI তৈরি করতে হয়:

  1. error_layout.xml ফাইলটি লিখুন:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       style="@style/Widget.MyApplication.AppWidget.Error"
       android:id="@android:id/background"
       android:layout_width="match_parent"
       android:textSize="24sp"
       android:layout_height="match_parent"
       android:orientation="vertical">
    
       <TextView
           android:id="@+id/error_title_view"
           android:layout_width="match_parent"
           android:textColor="@color/white"
           android:textFontWeight="800"
           android:layout_height="wrap_content"
           android:text="Example Widget Error" />
    
       <LinearLayout
           android:layout_width="match_parent"
           android:orientation="horizontal"
           android:paddingTop="4dp"
           android:layout_height="match_parent">
    
           <ImageButton
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_gravity="center"
            android:tint="@color/white"
            android:id="@+id/error_icon"
            android:src="@drawable/heart_broken_fill0_wght400_grad0_opsz24"
           />
           <TextView
               android:id="@+id/error_text_view"
               android:layout_width="wrap_content"
               android:textColor="@color/white"
               android:layout_height="wrap_content"
               android:layout_gravity="center"
               android:padding="8dp"
               android:textSize="16sp"
               android:layout_weight="1"
               android:text="Useful Error Message!" />
       </LinearLayout>
    
    </LinearLayout>
    
    
  2. onCompositionError ফাংশনটি ওভাররাইড করুন:

    override fun onCompositionError(
       context: Context,
       glanceId: GlanceId,
       appWidgetId: Int,
       throwable: Throwable
    ) {
       val rv = RemoteViews(context.packageName, R.layout.error_layout)
       rv.setTextViewText(
           R.id.error_text_view,
           "Error was thrown. \nThis is a custom view \nError Message: `${throwable.message}`"
       )
       rv.setOnClickPendingIntent(R.id.error_icon, getErrorIntent(context, throwable))
       AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, rv)
    }
    
  3. একটি পেন্ডিং ইন্টেন্ট তৈরি করুন যা আপনার GlanceAppWidgetReceiver রেফারেন্স করে:

    private fun getErrorIntent(context: Context, throwable: Throwable): PendingIntent {
        val intent = Intent(context, UpgradeToHelloWorldPro::class.java)
        intent.setAction("widgetError")
        return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
    }
    
    
  4. আপনার GlanceAppWidgetReceiver এ ইন্টেন্টটি পরিচালনা করুন:

    override fun onReceive(context: Context, intent: Intent) {
       super.onReceive(context, intent)
       Log.e("ErrorOnClick", "Button was clicked.");
    }