2016-04-04 22 views
0

'dan çağrılan geri arama çağrısına yol açar. Tüm çağrılar ve geri aramalar iyi çalışıyor. Yalnızca bir http hata kodu nedeniyle geri aramada (aynı geri çağrıyla) bir çağrıyı klonlayıp yeniden denediğim bir sorunum var.Bir aramayı klonlamak, ana iş parçacığı

public static abstract class MyCallback<T> implements Callback<T> { 
    @Override 
    public void onResponse(Call<T> call, retrofit2.Response<T> response) { 
     Timber.d("is this the main thread %b", Looper.myLooper() == Looper.getMainLooper()); 
     if (response.isSuccessful()) { 
      //success handling 
     } else { 
      if (response.code() == 406) { 
       // remedy reason for failure 
       call.clone().enqueue(MyCallback.this); 
      } 
     } 
    } 

    @Override 
    public void onFailure(Call<T> call, Throwable t) { 
     Timber.e("onFailure %s", t.getMessage()); 
    } 
} 

Bu veriyor:

is this the main thread true 
is this the main thread false 
is this the main thread false 
is this the main thread false 
is this the main thread false 
[looping] 

Ben vs. yeni bir arama, çağrı klonlamak Yalnızca geri arama kapalı çağrılır ana iş parçacığı başlayarak diğer/yeni geri aramaları etrafında oynadı. Ortaya çıkan asıl sorun, başarılı bir şekilde denenmiş aramadan sonra kullanıcı arayüzünü değiştirememektir.

+0

Are: Jake Wharton sadece bunun için bir PR yarattı? Kullanıcı Arayüzü değiştirmeyi denediniz mi ve bir istisna var mı? – muratgu

+0

@muratgu Evet. Ben sadece onun üzerinde tökezledim çünkü "görünümler sadece oluşturuldukları iş parçacığından düzenlenebilir" özel durum var. Ancak o zaman ben dahil ettim. Bu looper günlükleri kontrol eder .. – Till

+1

Ben ya retrofit ya da okhttp bir hata buldu düşünüyorum. Ben sadece, çağrılmadan önce yürütme iş parçacığının, çağrılmadan önce klon yöntemiyle oluşturulmasının ana iş parçacığı olmadığını doğruladım. – muratgu

cevap

İlgili konular