1

Android 5 のみで、一部のサードパーティ SDK (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: null オブジェクト参照 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: null オブジェクト参照 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は、Android 5.0のokhttp問題スレッドで報告された類似のもののようです: http://code.google.com/p/android/issues/detail?id=160522

この問題の考えられる理由:
カスタムの ResponseCache/サード パーティの ResponseCache を使用している可能性がありますが、それが適切に実装されておらず、okhttp が null 応答を正しく処理していません。

1. レスポンスキャッシュが不要な場合

この NPE の簡単な修正方法は、次の方法で接続のキャッシュを無効にすることです。
conn.setUseCaches(false)

2. レスポンスキャッシュが必要な場合

使用している ResponseCache の実装は何ですか? android.net.http.HttpResponseCache の Android のものですか、それともサードパーティのものですか?

カスタム ResponseCache の問題の根本原因

根本的な原因は、Android がステータス行 (応答コードを示す応答の一部、メッセージなど) が null キーを持つヘッダーとして保持されていると想定していることです。これは、インデックスがゼロのヘッダーを見るとAPIドキュメントで暗示されていますが、マップを返すメソッドや文字列を受け取るメソッドでは明示されていません

ここを参照してください: http://developer.android.com/reference/java/net/CacheResponse.html#getHeaders()

あなたが提供したスタックトレースから、問題はカスタム ResponseCache の使用に関連しているようです。その場合、必要がなければキャッシュを無効にすることができます。それ以外の場合は、上記の okhttp の問題に対する応答で説明されているように、カスタム応答キャッシュのメンテナーに連絡できます。

その他の Helpshift 関連のクエリについては、support@helpshift.com までお気軽にお問い合わせください。

于 2016-07-17T17:43:19.377 に答える