仅在android 5上,一些第三方sdks (adcolony和helpshift)就会随机崩溃(大多数情况下,应用程序刚刚启动)。在下面的android 5上,两者都工作得很好。
他们俩都撞上了
com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine(JavaApiConverter.java:329) com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine(JavaApiConverter.java:324)
帮助移位崩溃堆栈跟踪:
尝试在空对象引用com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine(JavaApiConverter.java:329) com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine(JavaApiConverter.java:324) com.android.okhttp.internal.http.JavaApiConverter.createOkResponse(JavaApiConverter.java:116) com.android.okhttp.internal.http.ResponseCacheAdapter.get(ResponseCacheAdapter.java:53上调用接口方法“java.lang.Object java.util.Map.get(java.lang.Object)”) com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:190) com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323) com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:491) com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105) com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25) HttpsURLConnectionImpl.java:25 java.lang.Thread.run(Thread.java:818)
广告群崩溃堆栈跟踪:
尝试在空对象引用com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine(JavaApiConverter.java:329) com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine(JavaApiConverter.java:324) com.android.okhttp.internal.http.JavaApiConverter.createOkResponse(JavaApiConverter.java:116) com.android.okhttp.internal.http.ResponseCacheAdapter.get(ResponseCacheAdapter.java:53上调用接口方法“java.lang.Object java.util.Map.get(java.lang.Object)”) com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:269) com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:208) com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25) HttpsURLConnectionImpl.java:25 at java.lang.Thread.run(Thread.java:818)
有人知道怎么解决吗?
发布于 2016-07-17 17:43:19
您提到的NPE似乎是类似的,在Android5.0的okhttp发布线程中报告的:http://code.google.com/p/android/issues/detail?id=160522
引发此问题的可能原因:
您可能正在使用自定义ResponseCache /第三方ResponseCache,而且它没有正确实现,而且okhttp没有正确处理空响应。
1.如果不需要响应缓存
此NPE的快速修复方法是禁用连接上的缓存。
conn.setUseCaches(false)
2.如果您需要响应缓存
您所使用的ResponseCache的实现是什么?是android.net.http.HttpResponseCache的安卓,还是第三方的?
自定义ResponseCache问题的根本原因
根本原因是Android假设状态行(例如,指示响应代码的响应部分,消息)被保存为带有空键的标头。当您查看索引为零的标头时,会在API文档中提到这一点,但是在返回Map的方法中,或者在接受字符串的方法中,这是不明确的。 见此处:http://developer.android.com/reference/java/net/CacheResponse.html#getHeaders()
从您提供的堆栈跟踪来看,问题似乎与使用自定义ResponseCache有关。如果是的话,您可以禁用缓存(如果不需要的话),否则您可以联系自定义响应缓存的维护人员,如上面关于okhttp问题的response中所提到的。
对于任何其他与Helpshift相关的查询,请访问support@helpshift.com与我们联系。
https://stackoverflow.com/questions/37962051
复制相似问题