3

가 충돌 할 때 나는 내 응용 프로그램이 전송 내 오류 로그에서이 예외를 받고 있어요 : 나는 그것을 재현 할 수 없었다안드로이드 지원 V4 DialogFragment 충돌 응용 프로그램

java.lang.RuntimeException: Unable to start activity ComponentInfo{<my activity>}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3553) 
    at android.app.ActivityThread.access$700(ActivityThread.java:140) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4898) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at android.support.v4.app.DialogFragment.onActivityCreated(DialogFragment.java:368) 
    at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1486) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:552) 
    at <my FragmentActivity wrapper>.onStart(BaseActivity.java:16) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1167) 
    at android.app.Activity.performStart(Activity.java:5216) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2073) 
    ... 12 more 

및 로그이 충돌에 이르기까지의 DialogFragment이 표시되었음을 나타내는 것 같지 않습니다. 여기 This is the line in the support library that is causing the crash

+1

대화 상자를 만들고 표시하는 데 사용되는 코드를 표시하십시오. –

+0

NullPointerException이 문제를 일으킨 것 같습니다. 특히 예외가 발생한 부분을 코드를 게시하여 문제를 해결할 수 있도록하십시오. –

+0

'getActivity()'는'null '을 반환하고 있습니다. 즉,'DialogFragment'는'Activity'에 붙어 있지 않습니다. 'DialogFragment'를 호출하는 곳에 코드를 게시하십시오. –

답변

2

은 mDialog는 대화가 제대로 생성되지 않았 음을 의미하는 null입니다. 이 상황이 발생했을 때와 동일한 상황 이었지만 매우 제한된 상황 (화면 회전과는 관계가 없었지만 시간의 100 %를 재현 할 수있는 무언가였습니다.)과 onCreateView()를 제대로 작성하지 않은 경우 대화 상자에서 null mDialog로 연결됩니다. onCreateView()를 사용하여 대화 상자를 만들 수 있습니다. http://developer.android.com/reference/android/app/DialogFragment.html의 기본 대화 상자 섹션에서도이를 보여줍니다. 그러나 항상 신뢰할 수있는 것은 아니라는 것을 증명했습니다. 그러나 내 충돌 시나리오에서 onCreateView() 대신 onCreateDialog()를 사용하면 onCreateView()가 사용하는 것과 동일한 레이아웃과 데이터를 사용했지만 항상 작동한다는 것을 알았습니다. DialogFragment를 대화 상자로 사용할 때 onCreateDialog()를 사용하도록 코드를 변경 했으므로 문제가 해결되었습니다. 그래서 그것은 당신이 점검하기를 원하는 것입니다.

당신은 (mDialog를가 남아있을 null 인 이유의 근본 원인이 있지만),이 코드를 사용할 수있는 무력 방법은 충돌을 중지하려면 - 나는 진짜 문제 이상 찾을 때까지이 성공적으로 사용 :

@Override 
public void onActivityCreated(Bundle arg0) { 
    if (getDialog() == null) { // Returns mDialog 
     // Tells DialogFragment to not use the fragment as a dialog, and so won't try to use mDialog 
     setShowsDialog(false); 
    } 
    super.onActivityCreated(arg0); // Will now complete and not crash 

}

관련 문제