Bir Bakışta ile hataları ele alma

Bir Bakışta'da hata işlemeyi iyileştirmeye yönelik API özellikleri Android 15'ten itibaren dahil edilmiştir. Bu sayfada, bu API'lerle ilgili en iyi uygulamalardan bazıları yer almaktadır.

Oluşturulamayan bileşenlerin etrafında bir "deneyim" bloku kullanın

Compose, composable'ların etrafında "dene yakalama" bloklarına izin vermez ancak uygulamanızın diğer mantığını bu bloklara yerleştirmenize olanak tanır. Bu, aşağıdaki örnekte gösterildiği gibi hata görünümünüz için Oluşturma'yı kullanmanıza olanak tanır:

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

Varsayılan hata düzeni

Yakalanmamış bir istisna veya bir Oluştur hatası varsa Bir Bakışta varsayılan bir hata düzeni görüntüler:

Hata türünü gösteren hata mesajı ve hatanın nerede bulunabileceğine dair bir öneri
Şekil 1.Glance 1.0 varsayılan hata düzeni
'İçerik gösterilemiyor' metnini içeren bir kutu
Şekil 2.Glance 1.1.0 varsayılan hata düzeni

Glance, geliştiricilerin bileşim başarısız olursa yedek olarak bir XML düzeni sağlamasına olanak tanır. Bu, Compose kodunda bir hata olduğu anlamına gelir. Bu hata kullanıcı arayüzü, uygulamanızın kodunda yakalanmamış bir hata olduğunda da görünür.

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

Bu düzen, kullanıcınızın etkileşimde bulunamayacağı statik bir düzendir ancak acil durumlarda kullanılabilir.

Hata mesajını gösteren bir başlık ve metin alanı içerir
Şekil 3.Örnek özel hata düzeni

Varsayılan hata kullanıcı arayüzüne işlem ekleyin

Glance 1.1.0 sürümünden itibaren Glance, varsayılan hata işleme kodunu geçersiz kılmanıza olanak tanır. Bu şekilde, yakalanmamış bir istisna veya bileşimde hata olması durumunda işlem geri çağırmaları ekleyebilirsiniz.

Bu özelliği kullanmak için onCompositionError() işlevini geçersiz kılın:

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

Bu işlevde Glance, hata giderme için RemoteViews API'yi kullanıyor. Böylece, XML kullanarak düzenleri ve işlem işleyicileri belirtebilirsiniz.

Aşağıdaki örneklerde, geri bildirim göndermek için bir düğme içeren hata kullanıcı arayüzünün nasıl oluşturulacağı adım adım gösterilmektedir:

  1. error_layout.xml dosyasını yazın
<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 işlevini geçersiz kıl
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 metriğinize referans veren, beklemedeki bir amaç oluşturun
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 ile amacınızı yerine getirin
override fun onReceive(context: Context, intent: Intent) {
   super.onReceive(context, intent)
   Log.e("ErrorOnClick", "Button was clicked.");
}