使用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

最佳答案

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

由于某种原因,该适配器似乎并没有被拾取。如果是的话,将不会调用com.google.gson.internal.bind.ReflectiveTypeAdapterFactory。因此,因为没有适配器被使用,所以Gson退回到了它的默认行为,即尝试通过反射来调用no-args构造函数,这在抽象类上是不可能的。

我们无法重现此错误,但是最近我们更新了客户端,以支持旧版本的Gson,这可能是当前的问题。您可以确定使用的是最新版本的客户端2.2.3吗?让我知道问题是否仍然存在。

关于android - 无法实例化抽象类clarifai2.dto.ClarifaiStatus,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41584459/

10-09 01:44