[英]Firebase crash due to null pointer exception
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 - 运行android 6.0和非Root的lgls770
下面的代码片段是WebSocketHandshake.java
的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");
}
}
如您所见,如果服务器在打开握手的响应中没有包含Upgrade HTTP标头(RFC 6455,4。 打开握手 ),则此代码将抛出NullPointerException
。
此外,因为为此方法提供的headers
实例是由new HashMap<String, String>()
( WebSocket.java :360
)创建的,所以从服务器发送的HTTP头必须区分大小写,尽管HTTP规范说“字段名称” 不区分大小写“ (RFC 2616,4.2 Message Headers )。 因此,例如,如果服务器以UPGRADE
等全部大写字母发送Upgrade HTTP标头,则尽管服务器的行为正确,但TubeSock仍会抛出NullPointerException
。
headers
实例应该由。创建
new TreeMap<String, List<String>>(String.CASE_INSENSITIVE_ORDER)
正如我在某个地方指出的那样。
虽然RFC 6455要求验证,但TubeSock的WebSocket实现甚至不验证Sec-WebSocket-Accept
标头。请参阅RFC 6455,4.1 。 客户要求详情。
如果您使用的是以前版本的firebase,请更新您的库版本的firebase。
就我而言,我使用的是firebase分析
compile 'com.google.android.gms:play-services-analytics:9.8.0'
然后我更新了
compile 'com.google.android.gms:play-services-analytics:10.2.4'
在我的情况下现在一切正常。如果你有问题请告诉我。
如果我的回答会帮助你,那么不要忘记增加我的答案投票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.