由于空指针异常导致Firebase崩溃

时间:2016-05-03 02:44:34

标签: android nullpointerexception websocket firebase

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)

版本:2016年3月3日最新(2.5.2 +)

设备详细信息:LGE - lgls770运行android 6.0和非Rooted

2 个答案:

答案 0 :(得分:4)

下面的代码段是verifyServerhandshakeHeadersWebSocketHandshake.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");
    }
}

如您所见,如果服务器在打开握手(RFC 6455,4. Opening Handshake)的响应中未包含Upgrade HTTP标头,则此代码将抛出{{1} }。

此外,由于此方法的NullPointerException实例是由headersnew HashMap<String, String>())创建的,因此从服务器发送的HTTP标头必须区分大小写虽然HTTP规范说&#34;字段名称不区分大小写&#34; (RFC 2616,WebSocket.java)。因此,例如,如果服务器以4.2 Message Headers:360等全部大写字母发送升级HTTP标头,则尽管服务器的行为正确,但TubeSock会抛出UPGRADE

NullPointerException实例应由

创建
headers
正如我在某个地方指出的那样。

TubeSock的WebSocket实现甚至不验证new TreeMap<String, List<String>>(String.CASE_INSENSITIVE_ORDER) 标头,尽管RFC 6455要求验证。有关详细信息,请参阅RFC 6455,4.1. Client Requirements

答案 1 :(得分:4)

如果您使用的是以前版本的firebase,请更新您的库版本的firebase。

就我而言,我使用的是firebase analytics

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

然后我用

更新了它
compile 'com.google.android.gms:play-services-analytics:10.2.4'

我的情况下现在一切正常。如果你有问题请告诉我。

如果我的回答对您有帮助,那么请不要忘记增加我的回答投票。