2

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

1 回答 1

1

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

出于某种原因,该适配器似乎没有被拾取。如果是,com.google.gson.internal.bind.ReflectiveTypeAdapterFactory就不会被调用。因此,由于没有适配器被拾取,Gson 回退到其默认行为,即尝试通过反射调用无参数构造函数,这在抽象类上是不可能的。

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

于 2017-01-11T14:30:42.363 回答