无法实例化抽象类clarifai2.dto.ClarifaiStatus

时间:2017-01-11 06:50:19

标签: android clarifai

使用Clarifai for Android在调用Clarifai时出错

W/System.err: java.lang.RuntimeException: Failed to invoke clarifai2.dto.ClarifaiStatus() with no args
W/System.err:     at com.google.gson.internal.ConstructorConstructor$2.construct(ConstructorConstructor.java:94)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:795)
W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:859)
W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:832)
W/System.err:     at clarifai2.api.request.ClarifaiRequest$Impl.executeSync(ClarifaiRequest.java:249)
W/System.err:     at clarifai2.api.request.ClarifaiRequest$Builder.executeSync(ClarifaiRequest.java:170)
W/System.err:     at com.example.amutgeka.visualclarifia.MainActivity.train(MainActivity.java:120)
W/System.err:     at com.example.amutgeka.visualclarifia.MainActivity$1$1.run(MainActivity.java:42)
W/System.err:     at java.lang.Thread.run(Thread.java:761)
W/System.err: Caused by: java.lang.InstantiationException: Can't instantiate abstract class clarifai2.dto.ClarifaiStatus
W/System.err:     at java.lang.reflect.Constructor.newInstance0(Native Method)
W/System.err:     at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
W/System.err:     at `enter code here`com.google.gson.internal.ConstructorConstructor$2.construct(ConstructorConstructor.java:91)
W/System.err:   ... 9 more

1 个答案:

答案 0 :(得分:1)

我目前维护这个库。这里的问题是EXCEPTIONS Fire, Flood, Aliens END_EXCEPTIONS 不应该直接实例化(因为它不能)。如果查看source code for the library,您可以看到我们注册了一个Gson适配器,它定义了如何构造ClarifaiStatus(在这种情况下,通过调用ClarifaiStatus的构造函数,即auto生成的代码)。

出于某种原因,该适配器似乎没有被拾取;如果是,AutoValue_ClarifaiStatus将不会被调用。因为没有适配器被拾取,Gson会回到其尝试通过反射调用no-args构造函数的默认行为,这在抽象类中是不可能的。

我们还没有能够重现此错误,但我们最近更新了客户端以支持旧版本的Gson,这可能是手头的问题。您能否确保使用最新版本的客户端com.google.gson.internal.bind.ReflectiveTypeAdapterFactory?如果问题仍然存在,请告诉我。