Glance-এ সমস্যা ম্যানেজ করার সুবিধা উন্নত করার জন্য API ফিচার Android 15-এ অন্তর্ভুক্ত করা হয়েছে। এই পৃষ্ঠায় এইসব API সংক্রান্ত পেশাদার পদ্ধতি সম্পর্কে তথ্য দেওয়া আছে।
কম্পোজ করা যায় না এমন কম্পোনেন্টের চারপাশে try-catch ব্লক ব্যবহার করুন
Compose কম্পোজেবলের চারপাশে ট্রাই-ক্যাচ ব্লক করার অনুমতি দেয় না, তবে আপনাকে এই ব্লকগুলিতে আপনার অ্যাপের অন্যান্য লজিক র্যাপ করতে দেয়। এটি আপনাকে আপনার ত্রুটি ভিউয়ের জন্য Compose ব্যবহার করতে দেয়, যেমন নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
provideContent { var isError = false var data = listOf<String>() try { val repository = (context.applicationContext as MyApplication).myRepository data = repository.loadData() } catch (e: Exception) { isError = true // TODO: handle error } if (isError) { ErrorView() } else { Content(data) } }
ডিফল্ট সমস্যার লেআউট
কোনও আনক্যাচড এক্সেপশন বা Compose সংক্রান্ত সমস্যা হলে, Glance একটি ডিফল্ট সমস্যার লেআউট দেখায়:
কম্পোজিশন ব্যর্থ হলে, Glance ডেভেলপারদের ফলব্যাক হিসেবে একটি XML লেআউট প্রদান করতে দেয়। এর অর্থ হল Compose কোডে কোনও সমস্যা হয়েছে। আপনার অ্যাপের কোডে কোনও সমস্যা থাকলে এই সমস্যার UI-ও দেখা যায়।
class UpgradeWidget : GlanceAppWidget(errorUiLayout = R.layout.error_layout) { // ... }
ডিফল্ট সমস্যা UI-তে অ্যাকশন যোগ করুন
Glance 1.1.0 থেকে, Glance আপনাকে ডিফল্ট সমস্যা ম্যানেজ করার কোড ওভাররাইড করতে দেয়। এইভাবে, আপনি কম্পোজিশনে আনক্যাচড এক্সেপশন বা ত্রুটির ক্ষেত্রে অ্যাকশন কলব্যাক যোগ করতে পারেন।
এই ফিচার ব্যবহার করতে, onCompositionError() ফাংশন ওভাররাইড করুন:
GlanceAppWidget.onCompositionError(
context: Context,
glanceId: GlanceId,
appWidgetId: Int,
throwable: Throwable
)
এই ফাংশনে, সমস্যা সমাধানের জন্য Glance RemoteViews API-তে ফিরে যায়।
এটি আপনাকে XML ব্যবহার করে লেআউট এবং অ্যাকশন হ্যান্ডলার নির্দিষ্ট করতে দেয়।
নিম্নলিখিত উদাহরণ থেকে আপনি ধাপে ধাপে জানতে পারবেন যে কীভাবে একটি ত্রুটি UI তৈরি করতে হয় যাতে মতামত পাঠানোর জন্য একটি বোতাম অন্তর্ভুক্ত থাকে:
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>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) }
আপনার
GlanceAppWidgetReceiverরেফারেন্স করে এমন একটি পেন্ডিং ইনটেন্ট তৈরি করুন:private fun getErrorIntent(context: Context, throwable: Throwable): PendingIntent { val intent = Intent(context, UpgradeToHelloWorldPro::class.java) intent.action = "widgetError" return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) }
আপনার
GlanceAppWidgetReceiver-এ অভিপ্রায় ম্যানেজ করুন:override fun onReceive(context: Context, intent: Intent) { super.onReceive(context, intent) Log.e("ErrorOnClick", "Button was clicked.") }