改造2 beta-4。 Android 6.无法创建转换器

时间:2016-02-05 16:28:53

标签: android retrofit retrofit2

如何解决?

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);

2 个答案:

答案 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)

在Android M中使用Retrofit2时有一个问题,如here

中所述

为我工作的解决方案之一是:

.*@