Bagaimana cara agar Robospice memperlakukan apa pun selain respons 200 dari Retrofit & OKHttp sebagai kesalahan

Saya menggunakan Robospice di Android dengan Retrofit dan OKHttp. Semua berfungsi dengan baik dengan respons yang diteruskan kembali ke aktivitas menggunakan Robospice RequestListener. Masalahnya adalah ia hanya mengembalikan kegagalan jika koneksi terputus atau ada masalah jaringan lainnya. Jika 401 dikembalikan maka diklasifikasikan sebagai sukses tetapi dengan respons nol karena tidak dapat mengurai JSON ke dalam POJO MobileAppSetup kami.

Saat ini saya harus melakukan pemeriksaan nol pada responsnya tetapi saya tidak tahu apa alasannya apakah itu kesalahan server atau 401 yang valid.

public final class HTTPRequestListener implements RequestListener<MobileAppSetup> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        Log.d("", "failure:"+ spiceException);
        loginProgress.hide();

    }

    @Override
    public void onRequestSuccess(final MobileAppSetup response) {
        Log.d("","success. Data: "+response);

        if(response==null)
            showDialog("Error logging in", "Please check your username and password and try again.", "");

        loginProgress.hide();

        postLoginProcess(response);

    }
} 

Saya perlu meneruskan kesalahan ini ke panggilan balik onRequestFailure agar saya dapat menanganinya dengan benar. Apakah ada cara untuk menentukan kode kesalahan yang Robospice harus perlakukan sebagai kesalahan. Saya pikir ini melibatkan penambahan semacam penangan kesalahan khusus tetapi saat ini benar-benar tidak dapat menemukan solusi.


person fraserh    schedule 25.03.2014    source sumber
comment
Itu benar-benar sesuatu yang harus dicari di forum Retrofit, ini hanya terkait secara longgar dengan RS.   -  person Snicolas    schedule 12.04.2014
comment
@Snicolas ini karena bug klien okhttp, lebih baik mencoba dengan rilis terbaru.   -  person LOG_TAG    schedule 23.04.2014


Jawaban (1)


Hal ini disebabkan oleh bug di klien OKHTTP kemungkinan bug!

Masalahnya adalah Ketika server menjawab dengan tanggapan 401 Tidak Sah, objek Panggilan Balik memanggil metode kegagalannya ()..

Ketika server kembali dengan status 401, objek respons RetrofitError adalah nol, dan tanda networkError disetel ke true, sehingga aplikasi tidak dapat memeriksa error.getResponse().getStatus(). Saya yakin kesalahannya terletak pada klien http. Saat menggunakan OkClient saya mendapatkan kesalahan ini: java.io.IOException: Tidak ditemukan tantangan autentikasi

Saya sarankan Anda mengunduh file jar okhttp baru dari http://square.github.io/okhttp/ jalankan proyek lagi! atau coba dengan klien lain selain okhttp.

person LOG_TAG    schedule 23.04.2014