التعامل مع أخطاء محددة عن طريق إرسال طلب آخر بشفافية في التعديل التحديثي

StackOverflow https://stackoverflow.com//questions/22014958

  •  21-12-2019
  •  | 
  •  

سؤال

هذه هي القضية التي أحاول التعامل معها،

  • إذا تم تنفيذ الطلب، وكانت الاستجابة تشير إلى انتهاء صلاحية رمز المصادقة،
  • إرسال طلب رمز التحديث
  • إذا نجح طلب الرمز المميز للتحديث، أعد محاولة الطلب الأصلي

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

لقد حققت هذا التدفق من قبل عند استخدام OkHttpClient مباشرة، لكنني لا أعرف كيفية تحقيق ذلك في التحديث التحديثي.

ربما شيء متعلق بهذا مفتوحة مشكلة حول معترض الاستجابة؟

إذا لم تكن هناك طريقة مباشرة لتحقيق ذلك في التحديث، فما هي أفضل طريقة لتنفيذه؟فئة المستمع الأساسي؟

أنا أستخدم RoboSpice مع التحديث أيضًا، إذا كان من الممكن أن يكون مفيدًا في مثل هذه الحالة.

هل كانت مفيدة؟

المحلول

وبما أنني أستخدم RoboSpice، فقد انتهى بي الأمر إلى القيام بذلك عن طريق إنشاء ملخص BaseRequestListener.

public abstract class BaseRequestListener<T> implements RequestListener<T> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        if (spiceException.getCause() instanceof RetrofitError) {
            RetrofitError error = (RetrofitError) spiceException.getCause();
            if (!error.isNetworkError() 
                && (error.getResponse().getStatus() == INVALID_ACCESS_TOKEN_STATUS_CODE)) {
                //I'm using EventBus to broadcast this event,
                //this eliminates need for a Context
                EventBus.getDefault().post(new Events.OnTokenExpiredEvent());
                //You may wish to forward this error to your listeners as well,
                //but I don't need that, so I'm returning here.
                return;
                }
         }
         onRequestError(spiceException);
    }

    public abstract void onRequestError(SpiceException spiceException);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top