gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:35:10 26 4
gpt4 key购买 nike

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 年 5 月 3 日的最新版本 (2.5.2+)

设备详细信息:LGE - lgls770 运行 android 6.0 和无根

最佳答案

下面的代码 fragment 是 verifyServerhandshakeHeaders 的实现方法见<a href="https://github.com/firebase/TubeSock/blob/master/src/main/java/com/firebase/tubesock/WebSocketHandshake.java" rel="noreferrer noopener nofollow">WebSocketHandshake.java</a> .

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 header ,则此代码将抛出 NullPointerException .

另外,因为 headers赋予此方法的实例由 new HashMap<String, String>() 创建( <a href="https://github.com/firebase/TubeSock/blob/master/src/main/java/com/firebase/tubesock/WebSocket.java" rel="noreferrer noopener nofollow">WebSocket.java</a>:360 ),从服务器发送的 HTTP header 必须区分大小写,尽管 HTTP 规范说“字段名称不区分大小写”(RFC 2616,4.2 Message Headers)。因此,例如,如果服务器以全部大写字母(如 UPGRADE)发送升级 HTTP header 。 , TubeSock 抛出 NullPointerException虽然服务器的行为是正确的。

headers实例应该由

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

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

TubeSock 的 WebSocket 实现甚至没有验证 Sec-WebSocket-Accept header ,尽管 RFC 6455 要求验证。请参阅 RFC 6455,4.1. Client Requirements了解详情。

关于android - 由于空指针异常导致 Firebase 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com