改造本机崩溃致命信号 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"/>