2016-06-26 17 views
24

Uygulamamın üretim sürümünde bu hatayı almaya başladı.NULL bir nesne referansı üzerinde Intent.migrateExtraStreamToClipData()

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference 

bu aslında oluştuğu net bir çizgi var ama son zamanlarda 24.0.0 benim destek kitaplığı versiyonunu değiştirdi. İşte tam StackTrace var:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1494) 
    at android.app.Activity.startActivityForResult(Activity.java:3745) 
    at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75) 
    at android.app.Activity.startActivityForResult(Activity.java:3706) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:871) 
    at com.google.android.gms.common.internal.zzi$1.zztD(Unknown Source) 
    at com.google.android.gms.common.internal.zzi.onClick(Unknown Source) 
    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

DÜZENLEME: Ben de bu hatayı almaya kullanıcıların% 100 de köklü olduğunu not etmek istiyorum. Bu aynı zamanda 23.4.0'da da gerçekleşir ... Aynı zamanda Firebase ile ilgili Base64.decode işlevi ile ilgili olan aynı zamanda attı olası bir hata var.

EDIT 2: Geçen gün bir Android Dev'den biraz yardım aldım. Projemin Google Play Hizmetleri sürümünü güncellememi önerdi ve şu ana kadar yardımcı olmuş gibi görünüyor. Kullanıcılarımın sonuçlarını almak için birkaç gün daha bekleyeceğim, ancak ilk günlükler ümit vericidir.

Daha önce 9.0.2 kullanıyorum ama şimdi 9.2.0 yaşıyorum.

DÜZENLEME 3: 9.2.0 için güncelleştirme, çökmelerine yardımcı olmadı. Köklü kullanıcılardan hala aynı hatayı alıyorum. Kilitlenen kullanıcıların, Android 6.0'ın altında olduğunu ve bu nedenle, canlı bir cihazda test edeceğimi ve ASAP'ı güncelleyeceğimi belirttim.

+2

Bu, benim emülatörümde de olur. İlk önce bir pop-up alıyorum: ... Cihazınız tarafından desteklenmeyen Google Play Hizmetlerine dayanır. Yardım için üreticiye başvurun. Hata ayıklamaya çalışacağım. – Wirling

+0

@Wirling Şimdi bahsettiğinize göre, hata raporlarının kullanıcı cihazım yerine Google'ın Cloud Test laboratuarı cihazlarından geldiğine dair bir şüphe duyuyorum. Kısa süre önce cihazımı özellikle bu hatayı test etmek için rootlaştırdım ve henüz görmedim. – c0deblooded

+0

Bunu Google Play Hizmetleri Vizyonu kütüphanesini (9.2) kullanarak oluşturabiliyorum. QR kod algılaması için kamerayı başlatmadan önce 'isGooglePlayServicesAvailable' yöntemini kullanarak basit bir kontrol yapıyorum. Kullanılamıyorsa, iletişim kutusunu 'getErrorDialog' yönteminden gösteririm. Güncelleştirmeye çalışırken çökecektir. Sadece köklü cihazlarda oluyor. – Brian

cevap

6

Google Play Hizmetleri'nin yüklü olmadığı cihazlarda hata oluşmuş gibi görünüyor, geçirilmiş niyet null olacaktır.

Etkinliğinizde, geçirilen niyetin startActivityForResult yöntemini geçersiz kılarak geçersiz olmadığından emin olabilirsiniz.

@Override  
public void startActivityForResult(Intent intent, int requestCode) { 
    if (intent == null) {  
     intent = new Intent();   
    }  
    super.startActivityForResult(intent, requestCode); 
} 
+0

Hmm benim için çalışmıyor, hala çökme yapıyorum. – jlively

+0

@jlivelyare alternatif olarak bir try catch bloğunda süper arama yapabilirsiniz. Bu şekilde, boş gösterici istisnası şüphesiz yakalanacaktır. Emin olmanız gereken tek şey, startActivityForResult'u geçersiz kılan etkinliğin doğru olmasıdır. – MVojtkovszky

+0

Özür dilerim, ama Dünya'da boş niyetle faaliyete başlama noktası nedir? –

-1

şu gerçekten bu soru biraz eski

@Override 
public void startActivityForResult(Intent intent, int requestCode) { 
    try { 
     super.startActivityForResult(intent, requestCode); 
    } catch (Exception ignored){} 
} 
+2

Yakalama bloklarını yavaş deneyin. Bu senaryo için bir null çek yeterli olacaktır. – Ajeet

3

çalışır, ama sadece bununla ilgili bir güncelleme paylaşmak istedik. this Github issue on the GCM project'a göre sorun, Google Play Hizmetleri sürümü 9.4.0'da çözülmelidir. Kabul edilen cevap da (ara bir yama olarak) çalışmalıdır, ancak Google Play Hizmetleri kitaplığınızı güncellerseniz bu sorun çözülmelidir.