使用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
答案 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
?如果问题仍然存在,请告诉我。