كيفية إصلاح الخطأ "Inappropriate blocking method call" في OkHttp و coroutines في Kotlin؟
مرحباً! أنا مطور مبتدئ في Kotlin وأحاول عمل طلب HTTP باستخدام OkHttp داخل Coroutine. لدي هذا الكود:
```kotlin
suspend fun fetchData(): String {
val client = OkHttpClient()
val request = Request.Builder()
.url("https://api.example.com/data")
.build()
val response = client.newCall(request).execute() // هنا الخطأ!
return response.body?.string() ?: ""
}
```
لكن المترجم أو أداة التحليل (Detekt, IntelliJ IDEA) تعطي تحذيراً: "Inappropriate blocking method call". أنا أستخدم Coroutines للعمل غير المتزامن، لكن طريقة `execute()` تمنع تنفيذ الخيط الحالي. كيف يمكنني عمل طلب HTTP بشكل صحيح في Coroutine دون منع الخيط؟ سمعت عن `suspendCancellableCoroutine` لكنني لا أفهم كيفية تطبيقه. كما أنني أستخدم Moshi لتحليل JSON. أرجو المساعدة في الفهم.
المشكلة: أريد الحفاظ على العمل غير المتزامن لـ Coroutines، لكن OkHttp بشكل افتراضي يقدم فقط `execute()` المتزامن أو `enqueue` باستخدام callback.