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
答案 0 :(得分:4)
下面的代码段是verifyServerhandshakeHeaders
中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");
}
}
如您所见,如果服务器在打开握手(RFC 6455,4. Opening Handshake)的响应中未包含Upgrade HTTP标头,则此代码将抛出{{1} }。
此外,由于此方法的NullPointerException
实例是由headers
(new 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'
我的情况下现在一切正常。如果你有问题请告诉我。
如果我的回答对您有帮助,那么请不要忘记增加我的回答投票。