التعامل مع الأخطاء من خلال ميزة "نظرة سريعة"

تم تضمين ميزات واجهة برمجة التطبيقات لتحسين التعامل مع الأخطاء في ميزة "نظرة سريعة" بدءًا من الإصدار Android 15. توفّر هذه الصفحة بعض أفضل الممارسات بشأن واجهات برمجة التطبيقات هذه.

استخدام كتلة تجريبية حول المكوّنات غير القابلة للإنشاء

لا تسمح ميزة Compose باختبار الأجزاء القابلة للإنشاء حول عناصر قابلة للإنشاء، ولكنها تتيح لك تضمين المنطق الآخر لتطبيقك في هذه الوحدات الأساسية. يتيح لك هذا استخدام الإنشاء لعرض الأخطاء، كما هو موضح في المثال التالي:

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

التنسيق التلقائي للأخطاء

إذا كان هناك استثناء غير معروف أو خطأ في الإنشاء، تعرض ميزة "نظرة سريعة" تنسيقًا تلقائيًا للأخطاء:

رسالة خطأ تعرض نوع الخطأ واقتراح مكان
 البحث عنه
الشكل 1.التنسيق التلقائي للأخطاء في ميزة "نظرة سريعة" 1.0
مربّع يحتوي على النص "يتعذّر عرض المحتوى"
الشكل 2.التنسيق التلقائي للأخطاء في ميزة Glance 1.1.0

تتيح ميزة "نظرة سريعة" للمطوّرين توفير تنسيق XML كإجراء احتياطي في حال تعذّر إنشاء المحتوى. وهذا يعني أن هناك خطأ في رمز الإنشاء. تظهر واجهة مستخدم الخطأ هذه أيضًا إذا كان هناك خطأ غير معروف في رمز تطبيقك.

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

هذا التخطيط عبارة عن تخطيط ثابت لا يمكن للمستخدم التفاعل معه، ولكنه جيد في حالات الطوارئ.

يحتوي على عنوان وحقل نصي لعرض رسالة خطأ
الشكل 3.مثال على تنسيق مخصّص للأخطاء

إضافة إجراءات إلى واجهة مستخدم الخطأ التلقائية

في الإصدار 1.1.0 من "نظرة سريعة"، تتيح لك ميزة "نظرة سريعة" إلغاء رمز معالجة الأخطاء التلقائي. بهذه الطريقة، يمكنك إضافة استدعاءات الإجراءات في حالة حدوث استثناء غير ملاحظ أو خطأ في التركيب.

لاستخدام هذه الميزة، عليك إلغاء الدالة onCompositionError():

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

وفي هذه الوظيفة، تستخدم ميزة "نظرة سريعة" واجهة برمجة تطبيقات RemoteViews لمعالجة الأخطاء. يتيح لك هذا تحديد التنسيقات ومعالجات الإجراءات باستخدام XML.

توضح لك الأمثلة التالية خطوة بخطوة كيفية إنشاء واجهة مستخدم للخطأ تتضمن زرًا لإرسال الملاحظات:

  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. إنشاء طلب intent في انتظار المراجعة يشير إلى 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.");
}