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

Glance-এ ত্রুটি পরিচালনার উন্নতির জন্য API বৈশিষ্ট্যগুলি Android 15-এর শুরুতে অন্তর্ভুক্ত করা হয়েছে। এই পৃষ্ঠাটি এই APIগুলি সম্পর্কিত কিছু সেরা অনুশীলন প্রদান করে।

অ-কম্পোজযোগ্য উপাদানগুলির চারপাশে একটি চেষ্টা-ক্যাচ ব্লক ব্যবহার করুন

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

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)
       }
   }

ডিফল্ট ত্রুটি বিন্যাস

যদি কোনো ধরা না পড়া ব্যতিক্রম বা রচনা ত্রুটি থাকে, Glance একটি ডিফল্ট ত্রুটি লেআউট প্রদর্শন করে:

ত্রুটির ধরন এবং এটি কোথায় দেখতে হবে তার জন্য একটি পরামর্শ দেখানো একটি ত্রুটি বার্তা৷
চিত্র 1. এক নজরে 1.0 ডিফল্ট ত্রুটি লেআউট
'বিষয়বস্তু দেখাতে পারছি না' লেখা সহ একটি বাক্স
চিত্র 2. এক নজরে 1.1.0 ডিফল্ট ত্রুটি লেআউট

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

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

এই লেআউটটি একটি স্ট্যাটিক লেআউট যার সাথে আপনার ব্যবহারকারী ইন্টারঅ্যাক্ট করতে পারে না, কিন্তু জরুরী ক্ষেত্রে এটি ভাল।

একটি ত্রুটি বার্তা প্রদর্শন করার জন্য একটি শিরোনাম এবং একটি পাঠ্য ক্ষেত্র রয়েছে৷
চিত্র 3. উদাহরণ কাস্টম ত্রুটি লেআউট

ডিফল্ট ত্রুটি UI এ কর্ম যোগ করুন

Glance 1.1.0 অনুসারে, Glance আপনাকে ডিফল্ট ত্রুটি হ্যান্ডলিং কোড ওভাররাইড করতে দেয়। এইভাবে, আপনি একটি অপ্রকাশিত ব্যতিক্রম বা রচনায় ত্রুটির ক্ষেত্রে অ্যাকশন কলব্যাক যোগ করতে পারেন।

এই বৈশিষ্ট্যটি ব্যবহার করতে, 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>

  1. 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)
}

  1. একটি মুলতুবি অভিপ্রায় তৈরি করুন যা আপনার 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)
}

  1. আপনার GlanceAppWidgetReceiver এ অভিপ্রায় পরিচালনা করুন
override fun onReceive(context: Context, intent: Intent) {
   super.onReceive(context, intent)
   Log.e("ErrorOnClick", "Button was clicked.");
}