Rétrofit2 erreur java.io.EOFException: fin de la saisie à la ligne 1 colonne 1

j'ai appelé PATCH service web utilisant Retrofit2 mais onResponse n'est pas appelé et l' onFailure s'appelle Malgré le fonctionnement du service est réussi sur le côté serveur parfaitement

et chaque fois,j'ai essayé d'utiliser fiddler pour vérifier le fonctionnement du service, j'ai trouvé le problème est que sérialiser la réponse à venir du service et en utilisant fiddler j'ai trouvé qu'aucun contenu du JSON réponse ainsi, le service de mise à niveau a supposé que son échec parce qu'il n'y a pas de contenu et il ne peut pas sérialiser le contenu vide et donne-moi de cette erreur

java.io.EOFException: End of input at line 1 column 1

Fiddler raw Response

HTTP/1.1 200 OK
Server: nginx/1.9.4
Date: Wed, 02 Mar 2016 09:55:55 GMT
Content-Type: application/json
Content-Length: 0
Connection: close
Status: 200 OK
X-Content-Type-Options: nosniff

la réponse JSON de Fiddler est vide

webservice java

Call<Object> call = TimeCapp.services.accept_invited_alerts(HomeActivity.api_token, alert_id);

call.enqueue(new Callback<Object>()
{
    @Override
    public void onResponse (Call<Object> call, Response<Object> response)
    {
        if (response.isSuccess()) {
            String x = response.body();
        }
    }
    @Override
    public void onFailure (Call<Object>call, Throwable t)
    {
        String x = t.getMessage();//java.io.EOFException: End of input at line 1 column 1
    }
}

j'ai essayé de remplacer objet Avec String, JsonObject, emptyCalssBody .... mais son échec

l'interface du webservice

@PATCH("alerts/{alert_id}/accept")
Call<Object> accept_invited_alerts(@Header("X-Api-Token") String  
api_token, @Path("alert_id") int alert_id);
19
demandé sur Mina Farid 2016-03-02 13:39:09

3 réponses

retournez simplement le vide à la place, si le corps est vide

@PATCH("alerts/{alert_id}/accept") Call<Void> accept_invited_alerts(@Header("X-Api-Token") String api_token, @Path("alert_id") int alert_id);

pour la mise à niveau avec RX java vous pouvez utiliser quelque chose comme ceci

@PATCH("alerts/{alert_id}/accept") Observable<Response<Void>> accept_invited_alerts(@Header("X-Api-Token") String api_token, @Path("alert_id") int alert_id);
42
répondu Bhargav 2018-07-12 09:14:57

je vous Remercie beaucoup.

Api

@FormUrlEncoded
    @POST("/rebu/insertusuario.php")
    Call<Void> insertLogin(@Field("email") String email,
                           @Field("senha") String senha,
                           @Field("codCondutor") Long codCondutor);

Classe

Call call = service.insertLogin(login.getEmail(), login.getSenha(), login.getCodCondutor());
2
répondu Victor Fernando 2017-07-22 17:23:45

Vous pouvez créer NullOnEmptyConverterFactory.classe:

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;

/**
 * Created by thientvse on 18/05/2018.
 */

public class NullOnEmptyConverterFactory extends Converter.Factory {

    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
        return new Converter<ResponseBody, Object>() {
            @Override
            public Object convert(ResponseBody body) throws IOException {
                if (body.contentLength() == 0) return null;
                return delegate.convert(body);               
            }
        };
    }
}

et ajouter au code create. Ex:

 UploadImageNghiemThuApi uploadService = new Retrofit.Builder()
            .baseUrl(Config.URL+"/")
            .client(okHttpClient)
            // -----add here-------
            .addConverterFactory(new NullOnEmptyConverterFactory())
            //---------------------
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(UploadImageNghiemThuApi.class);

j'espère que cela peut aider votre problème. Merci!

1
répondu Thientvse 2018-05-18 07:26:15