2016-05-03 2 views
7

Firebase-Nullzeigerausnahme. Befestigt Stacktrace untenFirebase-Absturz wegen Nullzeigerausnahme

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) 

Version: neueste (2.5.2+) als 3-Mai-2016

Gerätedetails: LGE - lgls770 mit Android 6.0 und Nicht Verwurzelt

+0

Passiert das konsequent? Bist du hinter einem Proxy? Dies scheint zu erfolgen, wenn die richtigen HTTP-Header für das Upgrade auf eine WebSocket-Verbindung nicht festgelegt sind. – jonnydee

+0

Ich habe Firebase erst gestern hinzugefügt und Update gepusht. Es stürzte für 1 Benutzer fast 12 mal. –

+0

Ist der Stack-Trace immer gleich? Haben Sie mehr Informationen als nur diese Stack-Trace? Wenn ja, können Sie es teilen (oder teilen Sie es mit [email protected] mit, um es zu teilen)? –

Antwort

3

Der Code Schnipsel unten ist die Implementierung von verifyServerhandshakeHeaders Methode gefunden in WebSocketHandshake.java.

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"); 
    } 
} 

Wie Sie sehen können, wenn der Server nicht enthält einen Upgrade-HTTP-Header in der Antwort der Öffnung Handshake (RFC 6455, 4. Opening Handshake), dieser Code wirft NullPointerException.

Darüber hinaus, weil die headers diese Methode bestimmte Instanz von new HashMap<String, String>() (WebSocket.java :360) erstellt wird, HTTP-Header vom Server gesendet muß case-sensitive obwohl die HTTP-Spezifikation sagt „Feldnamen sind Groß- und Kleinschreibung " (RFC 2616, 4.2 Message Headers). Wenn beispielsweise ein Server einen Upgrade-HTTP-Header in Großbuchstaben wie UPGRADE sendet, löst TubeSock NullPointerException aus, obwohl das Verhalten des Servers korrekt ist.

headers Instanz sollte durch

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

erstellt werden, wie ich an einem bestimmten Ort aufgezeigt.

Die WebSocket-Implementierung von TubeSock verifiziert nicht einmal Sec-WebSocket-Accept Header, obwohl die Verifizierung nach RFC 6455 erforderlich ist. Weitere Informationen finden Sie in RFC 6455, 4.1. Client Requirements.

3

Wenn Sie die vorherige Version von Firebase verwenden, aktualisieren Sie Ihre Bibliotheksversion von Firebase.

In meinem Fall ich war mit der die Feuerbasis Analytik

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

dann, dass ich aktualisiert mit

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

Alles arbeitet jetzt in meinem case.still gut, wenn Sie Problem haben, lassen Sie mich wissen, .

Wenn meine Antwort Ihnen helfen wird, dann vergessen Sie nicht, meine Antwort zu erhöhen.