2015-10-10 18 views
7

sto usando retrofit per chiamare un servizio Web e retrofit sta gettando un fallimento, il il messaggio dalla 'Throwable` mi sta dandoRetrofit 2.0 OnFailure - Risposta Raw

java.lang.IllegalStateException: Previsto BEGIN_OBJECT ma STRING alla riga 1 colonna 1 percorso $

Suppongo che ciò sia dovuto al fatto che il servizio Web .Net genera un errore e non restituisce JSON. Ma per dimostrarlo devo essere in grado di vedere la risposta non elaborata nello onFailure. C'è comunque che posso fare questo?

Questo è il codice che sto utilizzando

public void userLoginRequestEvent(final AuthenticateUserEvent event) { 

Call call = sApi.login(event.getUsername(), event.getPassword(), OS_TYPE, DeviceInfoUtils.getDeviceName()); 
call.enqueue(new Callback<LoggedInUser>() { 
    @Override 
    public void onResponse(Response<LoggedInUser> response, Retrofit retrofit) { 
    // response.isSuccess() is true if the response code is 2xx 

    if (response.isSuccess()) { 
     LoggedInUser user = response.body(); 

     AppBus.getInstance() 
       .post(new UserIsAuthenticatedEvent(user, event.getUsername(), 
         event.getPassword())); 
    } else { 
     int statusCode = response.code(); 

     // handle request errors yourself 
    } 
    } 

    @Override 
    public void onFailure(Throwable t) { 
    // handle execution failures like no internet connectivity 
    Log.d("ERROR", t.getMessage()); 
    } 


}); 
+1

Provare a registrare la richiesta/risposta utilizzando gli approcci all'indirizzo http://stackoverflow.com/questions/32514410/logging-with-retrofit-2 – keno

+0

Fornire l'elenco stacktrace completo e l'elenco dell'interfaccia API. Puoi stampare full stacktrace aggiungendo 't.printStackTrace()' nel tuo metodo 'onFailure (Throwable t)'. Non ho notato quanti anni ha questa domanda. Non è ancora risolto? :) –

+0

@ КлаусШварц è stato risolto dal primo commento, ma non è stata trovata nessuna risposta che potrei accettare – Flexicoder

risposta

1

La risposta del server è solo una stringa, non un oggetto. Utilizzare un Interceptor per visualizzare la risposta ricevuta.

Add incerceptor dipendenza

compile 'com.squareup.okhttp3:logging-interceptor:3.4.0' 

e quindi aggiungere al vostro client personalizzato OkHttp.

OKHttp client = .... 
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
client.interceptors().add(interceptor); 

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl("url") 
     .client(client) // add custom OkHttp client 

È possibile verificare la presenza di BASIC, HEADERS e BODY. Nel tuo caso, controlla BODY per vedere il corpo che invii e quale server sta inviando come corpo della risposta.

Problemi correlati