Retrofit原生崩溃致命信号11(SIGSEGV)。

7
我正在使用Retrofit库与服务器进行通信。从服务器端获取对象列表。
List<BaseAction>

我将子操作存储为:ActionUrl,ActionBell等。在回调成功方法中出现了崩溃。

 Fatal signal 11 (SIGSEGV), code 1, fault addr 0x610091 in tid 21471

我的问题是: 为什么 Retrofit 在使用过程中会导致原生应用崩溃?出现了什么问题?

4个回答

8

我花了几个小时进行调试,发现问题出在List上。Retrofit无法正确反序列化我的JSON并将其转换为Java对象。

在Volley中,我使用了自己的类ActionDeserialize<T>实现JsonDeserializer<T>,在其中根据类实现了类解析:

private Type getTypeForType(BTypes bType) {
    return bType.getResponseClass();
}

更多详细信息请参考此处
所以,我通过设置新的GsonConverter解决了我的问题(在阅读博客后)。
    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();

它可以解决本地代码崩溃的问题,希望能够节省您的时间。


4

在Android部分的build.gradle中添加以下两行代码:

android{
    compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
}

解决了我的问题。 - AndroidTank

0

我仔细检查了一遍,发现我的序列化名称与库的输出不匹配。问题解决了!


0

对我来说,问题是我没有网络权限,在我切换到旧版本的Retrofit时,错误在logcat中出现,当我添加了权限并切换回最新版本时,它就可以正常工作了。请在清单文件中添加此权限。

    <uses-permission android:name="android.permission.INTERNET"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接