1

仅在 android 5 上,一些 3rd 方 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)

Helpshift崩溃堆栈跟踪:

java.lang.NullPointerException:尝试在空对象引用 com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine 上调用接口方法“java.lang.Object java.util.Map.get(java.lang.Object)” (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) 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) com.helpshift.support.HSApiClient$1.run(HSApiClient.java:318) java.lang.Thread.run(Thread.java:818)

广告群崩溃堆栈跟踪:

java.lang.NullPointerException:尝试在空对象引用 com.android.okhttp.internal.http.JavaApiConverter.extractStatusLine 上调用接口方法“java.lang.Object java.util.Map.get(java.lang.Object)” (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) 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) com.jirbo.adcolony.ADCDownload.run(SourceFile:107) at java.lang.Thread.run(Thread.java:818)107) 在 java.lang.Thread.run(Thread.java:818)107) 在 java.lang.Thread.run(Thread.java:818)

任何人都知道如何解决这个问题?

4

1 回答 1

1

您提到的 NPE 似乎与 okhttp android 5.0 问题线程中报道的类似:http ://code.google.com/p/android/issues/detail?id=160522

此问题的可能原因:
您可能正在使用自定义 ResponseCache/第三方 ResponseCache,但未正确实现,并且 okhttp 未正确处理空响应。

1.如果不需要响应缓存

此 NPE 的快速修复是 - 通过以下方式禁用连接上的缓存
conn.setUseCaches(false)

2.如果您需要响应缓存

您正在使用什么 ResponseCache 实现?它是来自 android.net.http.HttpResponseCache 的 Android 版本,还是第三方的?

自定义 ResponseCache 问题的根本原因

根本原因是Android假定状态行(例如,指示响应代码的响应部分,一条消息)作为带有空键的标头保存。当您查看索引为零的标头时,API 文档中提到了这一点,但在返回 Map 或采用 String 的方法中并不明确

见这里:http: //developer.android.com/reference/java/net/CacheResponse.html#getHeaders()

从您提供的堆栈跟踪来看,问题似乎与使用自定义 ResponseCache 有关。如果是这样,如果不需要,您可以禁用缓存,否则您可以联系自定义响应缓存的维护者,如上面给出的 okhttp 问题的响应中所述。

对于任何其他与 Helpshift 相关的查询,请随时通过 support@helpshift.com 与我们联系

于 2016-07-17T17:43:19.377 回答