我正在使用Retrofit库与服务器端进行通信。从服务器我得到对象列表
List<BaseAction>
我将子操作存储为:ActionUrl, ActionBell, etc.
我在回调成功方法中崩溃了
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x610091 in tid 21471
而我的问题是 :出了什么问题以及为什么改装本机崩溃?
答案 0 :(得分:8)
我花了几个小时进行调试,并在List中找到该问题。 Retrofit无法正确反序列化我的JSON并将其转换为java对象。
在Volley中我使用了自己的类ActionDeserialize<T> implements JsonDeserializer<T>
,我根据类实现了类解析:
private Type getTypeForType(BTypes bType) {
return bType.getResponseClass();
}
有关此here
的更多详细信息所以,我通过设置新的GsonConverter解决了我的问题(在blog读取之后):
Gson gson = new GsonBuilder()
.registerTypeAdapter(BaseActionPOJO.class, new ActionDeserialize<BaseActionPOJO>())
.create();
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(loglevel)
.setConverter(new GsonConverter(gson))
.setRequestInterceptor(requestInterceptor)
.setEndpoint(Urls.BASE_URL)
.setClient(new OkClient())
.build();
它解决了原生部分的本机崩溃问题。 我希望它能节省您的时间。
答案 1 :(得分:4)
将这两行添加到android部分的build.gradle
中:
android{
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
答案 2 :(得分:0)
我仔细检查了一下,发现序列化的名称与库的输出不匹配。问题解决了!
答案 3 :(得分:0)
对我来说,原来我没有互联网许可,当我切换到旧版本的改造时,该错误在logcat中出现在我身上,当我添加许可并切换回最新版本。 将此权限添加到清单中
<uses-permission android:name="android.permission.INTERNET"/>