2016-05-03 16 views
7

Firebase null pointer istisnası. Ekli StackTrace aşağıNull işaretçi istisnası nedeniyle Firebase kazasında

altına
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) 

Sürüm: en son (2.5.2+) 3-may-2016 itibariyle

Cihaz Detayları: LGE - lgls770 çalışan 6.0 android ve Non-köklü

+0

Bu, tutarlı bir şekilde gerçekleşiyor mu? Bir vekilin arkasında mısın? Bu, bir WebSocket bağlantısına yükseltmek için doğru HTTP başlıkları ayarlanmadığında ortaya çıkar. – jonnydee

+0

Sadece dün firebase ekledim ve güncellemeyi zorladım. Yaklaşık 12 kere 1 kullanıcı çöktü. –

+0

Yığın izi her zaman aynı mı? Sadece bu yığın izlemeden daha fazla bilginiz var mı? Öyleyse, paylaşır mısınız (veya paylaşmak için [email protected] adresine ulaşırsınız)? –

cevap

3

kodu Aşağıdaki kod parçacığı, WebSocketHandshake.java adresinde bulunan verifyServerhandshakeHeaders yönteminin uygulanmasıdır. Sunucu açma el sıkışma (RFC 6455, 4. Opening Handshake) ait karşılık olarak bir yükseltme HTTP başlığını içermiyorsa

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

Görüldüğü gibi, bu kod NullPointerException atar. Bu yönteme verilen headers örneği new HashMap<String, String>() (WebSocket.java :360) tarafından oluşturulur, çünkü ek olarak

, sunucudan gönderilen HTTP üst olmalıdır harf duyarlı HTTP özellikleri diyor rağmen "alan adları harf duyarsızdır " (RFC 2616, 4.2 Message Headers). Bu nedenle, örneğin, bir sunucu bir Yükseltme HTTP üstbilgisini UPGRADE gibi tüm büyük harflere gönderirse, TubeSock sunucunun davranışı doğru olmasına rağmen NullPointerException'u atar. Belirli bir yerde belirttiği gibi

headers örneği

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

tarafından oluşturulmalıdır. Doğrulama RFC 6455. Bkz RFC 6455, ayrıntılar için 4.1. Client Requirements gerektirdiği halde

TubeSock en WebSocket uygulaması bile Sec-WebSocket-Accept başlığını doğrulamaz.

3

Firebase'in önceki sürümünü kullanıyorsanız, kitaplığınızın Firebase sürümünü güncelleyin. Benim durumumda

i

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

Sonra varsa

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

Şimdi herşey benim case.still içinde iyi çalışıyor sorun bana bildirin o güncellenen Firebase analitik kullanıyordum . Cevabım size yardım ederse, cevabımı artırmayı unutmadan

.

İlgili konular