2016-05-03 10 views
7

ファイヤーベースヌルポインタ例外。 3-よい-2016として最新(2.5.2+)ヌルポインタ例外によるFirebaseクラッシュ

デバイスの詳細:ダウン

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase(java.util.Locale)' on a null object reference 
     at com.firebase.tubesock.WebSocketHandshake.verifyServerHandshakeHeaders(WebSocketHandshake.java:96) 
     at com.firebase.tubesock.WebSocket.runReader(WebSocket.java:365) 
     at com.firebase.tubesock.WebSocket.access$000(WebSocket.java:30) 
     at com.firebase.tubesock.WebSocket$2.run(WebSocket.java:108) 
     at java.lang.Thread.run(Thread.java:818) 

版以下に添付スタックトレースLGE - lgls770実行6.0アンドロイドおよび非根ざし

+0

これは一貫して発生しますか?プロキシの背後にいますか?これは、WebSocket接続にアップグレードするための適切なHTTPヘッダーが設定されていない場合に発生します。 – jonnydee

+0

ちょうど昨日firebaseを追加して更新を押しました。それは1ユーザーのためにほぼ12回クラッシュした。 –

+0

スタックトレースは常に同じですか?このスタックトレース以外の情報はありますか?もしそうなら、それを共有することができますか(または共有するには[email protected]に連絡してください)? –

答えて

3

コード次のスニペットはにあるverifyServerhandshakeHeadersメソッドの実装です。

public void verifyServerHandshakeHeaders(HashMap<String, String> headers) { 
    if (!headers.get("Upgrade").toLowerCase(Locale.US).equals("websocket")) { 
     throw new WebSocketException("connection failed: missing header field in server handshake: Upgrade"); 
    } else if (!headers.get("Connection").toLowerCase(Locale.US).equals("upgrade")) { 
     throw new WebSocketException("connection failed: missing header field in server handshake: Connection"); 
    } 
} 

あなたが見ることができるように、サーバが開口ハンドシェーク(RFC 6455、4. Opening Handshake)の応答にアップグレードHTTPヘッダーを含まない場合、このコードはNullPointerExceptionをスロー。また

この方法についてheadersインスタンスがnew HashMap<String, String>()WebSocket.java :360)によって作成されるため、サーバから送信されたHTTPヘッダが大文字と小文字を区別なければならないHTTP仕様は、「フィールド名は大文字と小文字を区別しないと言うものの"(RFC 2616,4.2 Message Headers)。したがって、たとえばサーバがUPGRADEのようなすべての大文字でアップグレードHTTPヘッダを送信すると、TubeSockはサーバの動作は正しいが、NullPointerExceptionをスローします。私は特定の場所で指摘したように

headersインスタンスが

new TreeMap<String, List<String>>(String.CASE_INSENSITIVE_ORDER) 

によって作成されなければなりません。

TubeSockのWebSocket実装では、確認はRFC 6455で要求されていますが、Sec-WebSocket-Acceptヘッダーは検証されません。詳細はRFC 6455、4.1. Client Requirementsを参照してください。

3

以前のバージョンのfirebaseを使用している場合は、firebaseのライブラリバージョンをアップデートしてください。

私の場合、私はその後、私はあなたが問題私に教えを持っている場合

compile 'com.google.android.gms:play-services-analytics:10.2.4' 

ですべてが今の私のcase.stillで正常に動作していることを更新firebase分析

compile 'com.google.android.gms:play-services-analytics:9.8.0' 

を使用していました。

私の答えが私の答えを増やすのを忘れないように助けてくれるならば。