Retrofit / Gson如何动态创建类型适配器

时间:2018-04-09 08:31:35

标签: kotlin gson retrofit2

我从一个例子中学到了,所以我不确定这是否是最佳方式,但无论如何,我使用下面的代码。我创建了一个Retrofit实例并将其用于所有请求。

由于有许多方法,因此有许多类型的数据。似乎我可以通过添加注释自动创建适配器(json - >我的数据类)。但是我需要更多的控制(继承:数据类有共享字段,依赖:某些字段可能不存在,具体取决于其他字段的值),所以我为每个类创建了一个自定义适配器。所以,目前我的代码是这样的:

if (instance == null)
{
   val gson = GsonBuilder()
             .registerTypeAdapter(myClass1::class.java, myClassDeserialiser1())
              .... (tens of this) ....
             .registerTypeAdapter(myClass30::class.java, myClassDeserialiser30())
             .create()
    instance = Retrofit.Builder().
                   .addConverterFactory(GsonConverterFactory.create(gson))
                   .build()
                   .create(MyAPIs::class.java);
} 
return instance

上面的问题是我提前同时创建了所有解析器的实例。这可能效率低下。我希望我可以在他们第一次需要时创建它们。这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以在类定义中添加@JsonAdapter注释,而不是调用registerTypeAdapter。我无法对其效率发表评论,但它会将适配器信息与对象相关联,而不是创建您的Gson对象,这听起来就像您想要的那样。