改造本机崩溃致命信号 11 (SIGSEGV)
Retrofit native crash Fatal signal 11 (SIGSEGV)
我正在使用 Retrofit 库与服务器端通信。从服务器我得到对象列表
List<BaseAction>
我将子操作存储为:ActionUrl, ActionBell, etc.
我在回调成功方法中崩溃了
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x610091 in tid 21471
我的问题是:有什么问题,为什么改造会导致本机崩溃?
我花了几个小时调试并在 List 中发现了这个问题。 Retrofit 无法正确反序列化我的 JSON 并将其转换为 java 对象。
在 Volley 中,我使用了自己的 class ActionDeserialize<T> implements JsonDeserializer<T>
,其中我根据 class:
实现了 class 解析
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();
并解决了原生部分的原生崩溃问题。
我希望它能节省您的时间。
我仔细检查了一下,我的序列化名称与库的输出不匹配。问题已解决!
将这两行添加到 build.gradle
的 android 部分:
android{
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
对我来说,结果是我没有互联网许可,当我切换到旧版本的改造时,logcat 出现了错误,当我添加时它对我来说工作正常权限并切换回最新版本。
将此权限添加到清单
<uses-permission android:name="android.permission.INTERNET"/>
我正在使用 Retrofit 库与服务器端通信。从服务器我得到对象列表
List<BaseAction>
我将子操作存储为:ActionUrl, ActionBell, etc.
我在回调成功方法中崩溃了
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x610091 in tid 21471
我的问题是:有什么问题,为什么改造会导致本机崩溃?
我花了几个小时调试并在 List 中发现了这个问题。 Retrofit 无法正确反序列化我的 JSON 并将其转换为 java 对象。
在 Volley 中,我使用了自己的 class ActionDeserialize<T> implements JsonDeserializer<T>
,其中我根据 class:
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();
并解决了原生部分的原生崩溃问题。 我希望它能节省您的时间。
我仔细检查了一下,我的序列化名称与库的输出不匹配。问题已解决!
将这两行添加到 build.gradle
的 android 部分:
android{
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
对我来说,结果是我没有互联网许可,当我切换到旧版本的改造时,logcat 出现了错误,当我添加时它对我来说工作正常权限并切换回最新版本。 将此权限添加到清单
<uses-permission android:name="android.permission.INTERNET"/>