如何解决?
Process: www.palchiki.com.palchiki, PID: 2047
java.lang.IllegalArgumentException: Unable to create converter for class www.palchiki.com.palchiki.model.ServiceResponse
for method APIWebService.getServices
at retrofit2.Utils.methodError(Utils.java:154)
at retrofit2.MethodHandler.createResponseConverter(MethodHandler.java:62)
at retrofit2.MethodHandler.create(MethodHandler.java:33)
at retrofit2.Retrofit.loadMethodHandler(Retrofit.java:164)
at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy2.getServices(Unknown Source)
at www.palchiki.com.palchiki.fragment.ServiceFragment.onCreateView(ServiceFragment.java:94)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
我使用com.squareup.retrofit2:retrofit:2.0.0-beta4和com.squareup.retrofit2:converter-gson:2.0.0-beta4
适配器
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URLWebService)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
接口
@GET("/integration.php?command=getServices")
Call<ServiceResponse> getServices(@Query("city") String cityId);
答案 0 :(得分:0)
您必须为ServiceResponse类指定一个Converter,以便gson有效地序列化/反序列化您的类 它会像这样
import {Component} from 'angular2/core';
import {
Control,
ControlGroup,
FormBuilder
} from "angular2/common";
import {CharacterService} from "./character-service";
@Component({
selector: 'register-character-form',
template: `
<h2 class="ui header">A new adventurer is coming...</h2>
<form (ngSubmit)="register()" [ngFormModel]="characterForm" class="ui form">
<div class="field">
<label>Nom</label>
<input ngControl="name">
</div>
<button type="submit" class="ui button">Enter in the adventure</button>
</form>
`,
providers: [CharacterService]
})
export class RegisterCharacterFormCmp {
characterForm: ControlGroup;
name: Control;
constructor(private _characterService: CharacterService, fb: FormBuilder) {
this.name = fb.control('', this.characterNameValidator);
this.characterForm = fb.group({
name: this.name
});
}
register(): void {
//TODO: To implement
}
// Not works, this binds the control
characterNameValidator(control: Control) {
return this._characterService.isCharacterNameAlreadyExists(control.value) ? {nameCharacterAlreadyExistsError: true} : null;
}
}
稍后,您必须像这样
将此gson实例提供给您的gson转换器工厂GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(ServiceResponse.class, new ServiceResponseJson());
Gson gson = builder.build();
ServiceResponseJson必须实施 JsonDeserializer和/或JsonSerializer
答案 1 :(得分:0)