2016-06-23 6 views
0

Ich bin so verwirrt, wenn ich Retrofit2 (Retrofit-Version 2.1.0 @) meine Anfrage, api wie dieseRetrofit2 benutzerdefinierte Converter Anfrage zu verschlüsseln, @ Feld verwendet, sondern konvertieren String nicht funktionieren

public interface API { 
     @FormUrlEncoded 
     @POST("login.do?os=" + ConstantValue.OS + "&version=" + ConstantValue.VERSION) 
     Observable<LoginInfo> login(@Field("cmd") String params); 
    } 

verschlüsseln mein Coustom Converter Hauptcode

@Override 
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, 
    Retrofit retrofit) { 
    TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); 
    return new DecryptResponseBodyConverter<>(gson, adapter); 
    } 

    @Override 
    public Converter<?, RequestBody> requestBodyConverter(Type type, 
    Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { 
    TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); 
    return new EncryptRequestBodyConverter<>(gson, adapter); 
    } 

    @Override 
    public Converter<?, String> stringConverter(Type type, Annotation[]  annotations, Retrofit retrofit) { 
    TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); 
    return new EncryptRequestStringConverter<>(gson,adapter); 
    } 

die Methode stringConverter meines benutzerdefinierten Konverters nicht funktionieren. retrofit2.BuildInConvert $ String zuerst vor meinem ausführen ..

Hilfe ~ Hilfe ~

Antwort

0

ich fand den Standard BuildInConverters, wird sein String die Anforderung abzufangen, welchen Typ String ist.

@Override public Converter<?, String> stringConverter(Type type, Annotation[] annotations,Retrofit retrofit) { 
     if (type == String.class) { 
      return StringConverter.INSTANCE; 
     } 
     return null; 
    } 

so ändere ich den Typ des Parameters, wie dieser

public interface API { 
    @FormUrlEncoded 
    @POST("login.do?os=" + ConstantValue.OS + "&version=" + ConstantValue.VERSION) 
    Observable<LoginInfo> login(@Field("cmd") JsonObject params); 

}

es funktioniert dann.