2016-06-26 19 views
24

내 프로덕션 버전에서이 오류가 발생되기 시작했습니다.null 객체 참조에서 Intent.migrateExtraStreamToClipData()

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

실제로 발생하는 명확한 선은 없지만 최근 내 지원 라이브러리 버전을 24.0.0으로 변경했습니다. 여기에 전체 스택 트레이스는 다음과 같습니다

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) 

편집 : 나는이 오류가 사용자의 100 %도 뿌리를두고 있습니다 싶습니다. 이것은 또한 23.4.0에서 발생합니다 ... 또한 Firebase와 관련하여 Base64.decode 함수와 관련이있는 잠재적 인 관련 오류가 동시에 발생했습니다.

EDIT 2 : 요 전날 Android Dev로부터 도움을 받았습니다. 그들은 프로젝트의 Google Play 서비스 버전을 업데이트 할 것을 제안했으며 지금까지 도움이 된 것 같습니다. 내 사용자로부터 결과를 얻기 위해 며칠 더 기다릴 것이지만 초기 로그는 유망하다.

이전에 9.0.2를 사용했지만 지금은 9.2.0에 있습니다.

EDIT 3 : 9.2.0으로 업데이트해도 충돌이 발생하지 않았습니다. 나는 뿌리깊은 사용자들로부터 여전히 동일한 오류를 받고있다. 나는 사용자가 Android 6.0 이하에서 충돌을 일으키고 있으므로 실제 장치를 테스트하고 최대한 빨리 업데이트 할 것이라고 언급했습니다.

+2

내 에뮬레이터에서도 마찬가지입니다. 먼저 팝업창이 나타납니다. ... 기기에서 지원하지 않는 Google Play 서비스를 사용합니다. 도움을 받으려면 제조업체에 문의하십시오. 나는 디버깅을 시도 할 것이다. – Wirling

+0

@Wirling 이제 오류에 대한 언급은 사용자의 기기 대신 Google의 클라우드 테스트 실험실 기기에서 발생한다고 의심됩니다. 나는 최근에이 오류를 테스트하기 위해 특별히 장치를 뿌리 째 뽑았지만 아직 팝업이 표시되지 않았다. – c0deblooded

+0

Google Play 서비스 비전 라이브러리 (9.2)를 사용하여이를 재현 할 수 있습니다. QR 코드 감지를 위해 카메라를 시작하기 전에'isGooglePlayServicesAvailable' 메소드를 사용하여 간단한 검사를합니다. 사용할 수 없다면'getErrorDialog' 메쏘드의 대화 상자를 보여줄 것입니다. 업데이트를 시도하면 충돌이 발생합니다. 루팅 된 기기에서만 발생합니다. – Brian

답변

6

Google Play 서비스가 설치되지 않은 기기에서 오류가 발생하는 것처럼 보입니다. 전달 된 의도는 null이됩니다.

액티비티에서 startActivityForResult 메소드를 오버라이드하여 전달 된 의도가 null이 아닌지 확인할 수 있습니다.

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

흠, 나를 위해 작동하지 않습니다, 나는 여전히 충돌을 얻을. – jlively

+0

@jlivelyare try catch 블록에서 super를 호출 할 수도 있습니다. 그런 식으로 널 포인터 예외가 의심없이 잡힐 것입니다. startActivityForResult를 대체하는 활동이 올바른지 확인해야합니다. – MVojtkovszky

+0

실례 합니다만, 지구상에서 빈 의도로 활동을 시작하는 것은 무엇입니까? –

-1

그게 정말이 질문은 조금 오래된

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

시도 블록이 느립니다. 이 시나리오에서는 Null 검사만으로도 충분합니다. – Ajeet

3

작동하지만, 난 그냥에 업데이 트를 공유하기를 원해요. this Github issue on the GCM project에 따르면 문제는 Google Play 서비스 버전 9.4.0에서 해결되어야합니다. 승인 된 답변도 중간 패치로 적용되지만 Google Play 서비스 라이브러리를 업데이트하는 경우이 문제를 해결해야합니다.

관련 문제