Android 15 থেকে শুরু করে Glance-এ সমস্যা সমাধান উন্নত করার জন্য API ফিচার অন্তর্ভুক্ত করা হয়েছে। এইসব API সংক্রান্ত পেশাদার পদ্ধতি এই পৃষ্ঠায় দেওয়া আছে।
কম্পোজ করা যায় না এমন কম্পোনেন্টের চারপাশে try-catch ব্লক ব্যবহার করুন
Compose, কম্পোজেবল আইটেমের চারপাশে try-catch ব্লক ব্যবহার করার অনুমতি দেয় না, তবে আপনাকে এইসব ব্লকে আপনার অ্যাপের অন্যান্য লজিক র্যাপ করতে দেয়। এটি আপনাকে নিম্নলিখিত উদাহরণে দেখানো আপনার এরর ভিউয়ের জন্য কম্পোজ ব্যবহার করতে দেয়:
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) } }
ডিফল্ট সমস্যার লেআউট
কোনও আনকড ব্যতিক্রম বা কম্পোজ সংক্রান্ত সমস্যা থাকলে, Glance একটি ডিফল্ট সমস্যা লেআউট দেখায়:
কম্পোজিশন কাজ না করলে, ফলব্যাক হিসেবে Glance ডেভেলপারদের XML লেআউট প্রদান করতে দেয়। এর অর্থ হল, কম্পোজ কোডে কোনও সমস্যা হয়েছে। আপনার অ্যাপের কোডে কোনও আনকড এরর থাকলেও এই 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.") }