2017-05-31 26 views
-5

Android 4と私のダイアログフラグメントに問題があります。私はDialogsを開くことができますが、私はNullPointerExceptionを得るたびにダイアログをキャンセルするか、それを送信します。 5または6のような新しいAndroidのバージョンでは、すべてがうまくいきます。 それはとても迷惑です。なぜgoogleなのか???私は複数の日を検索し、いくつかの事をテストしましたが、私はこれを動作させることができません。アンドロイド4 - ダイアログフラグメント - NullPointer例外

public class BirthdatePickerDialogFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

//region Variables 



//Listener Object 
private BirthdatePickerDialogFragment.OnCompleteBabyBirthdateListener setDateListener; 

Context sourceActivityContext = null; 

//endregion 



@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    String savedBirthdateString = SharedPreferenceHelper.getSharedPreferenceString(sourceActivityContext,SharedPreferenceHelper.Birthdate,""); 

    int year = 0; 
    int month = 0; 
    int day = 0; 


    if(savedBirthdateString != "") 
    { 
     String[] splitBirthdateString = savedBirthdateString.split("\\."); 


     int strYear = Integer.parseInt(splitBirthdateString[2]); 
     int strMonth = (Integer.parseInt(splitBirthdateString[1])) - 1 ; 
     int strDay = Integer.parseInt(splitBirthdateString[0]); 

     Calendar c = Calendar.getInstance(); 
     c.set(strYear,strMonth,strDay); 


     year = c.get(Calendar.YEAR); 
     month = c.get(Calendar.MONTH); 
     day = c.get(Calendar.DAY_OF_MONTH); 

    }   
    else{ 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     year = c.get(Calendar.YEAR); 
     month = c.get(Calendar.MONTH); 
     day = c.get(Calendar.DAY_OF_MONTH); 

    } 

    // Create a new instance of DatePickerDialog and return it 
    return new DatePickerDialog(getActivity(), this, year, month, day); 
} 

@Override 
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { 
    String strYear = String.valueOf(year); 
    String strDayOfMonth = String.valueOf(dayOfMonth); 
    String strMonth = String.valueOf(month + 1); 

    setDateListener.onCompleteBirthDatePicker(MessageFormat.format("{0}.{1}.{2}", strDayOfMonth, strMonth, strYear)); 
} 


public static interface OnCompleteBabyBirthdateListener { 
    public abstract void onCompleteBirthDatePicker(String babyBirthDate); 

} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    try { 
     this.setDateListener = (BirthdatePickerDialogFragment.OnCompleteBabyBirthdateListener)context; 
     this.sourceActivityContext = context; 
    } 
    catch (final ClassCastException e) { 
     throw new ClassCastException(context.toString() + " must implement OnCompleteListener"); 
    }  

} 

}

これは、誕生日のダイアログです。それは開かれますが、私が提出またはキャンセルすると例外がスローされます。 誰かが私を助けてくれることを願っています。 EXCEPTIONLOG:

E/AndroidRuntime: FATAL EXCEPTION: main 
       java.lang.NullPointerException 
        at com.jalbmagic.test.Dialogs.BirthdatePickerDialogFragment.onDateSet(BirthdatePickerDialogFragment.java:93) 
        at android.app.DatePickerDialog.tryNotifyDateSet(DatePickerDialog.java:148) 
        at android.app.DatePickerDialog.onStop(DatePickerDialog.java:155) 
        at android.app.Dialog.dismissDialog(Dialog.java:326) 
        at android.app.Dialog.dismiss(Dialog.java:302) 
        at android.app.Dialog.cancel(Dialog.java:1104) 
        at android.app.Dialog.onTouchEvent(Dialog.java:617) 
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:739) 
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1873) 
        at android.view.View.dispatchPointerEvent(View.java:7307) 
        at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3174) 
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3119) 
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4155) 
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4134) 
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4226) 
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171) 
        at android.os.MessageQueue.nativePollOnce(Native Method) 
        at android.os.MessageQueue.next(MessageQueue.java:125) 
        at android.os.Looper.loop(Looper.java:124) 
        at android.app.ActivityThread.main(ActivityThread.java:4745) 
        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:786) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
        at dalvik.system.NativeStart.main(Native Method) 
+0

私たちはあなたのコンソールを共有します – ziLk

+0

正確に何が起きているのかが分かるようにログを投稿できますか?また、これが返ってくるかどうかを確認するためにデバッグすることができます: 'savedBirthdateString'? –

+0

私の更新されたコードを確認してください –

答えて

0

と交換してください。 APIレベル23以降、メソッドonAttach(アクティビティアクティビティ)が交換され、新しいバージョンはonAttach(コンテキストコンテキスト)です。 私はAndroid 6ですべての時間をテストし、onAttach(コンテキストコンテキスト)しか実装していないので、APIレベルを低くしてからこのメソッドを使用することはできません。だから問題は明らかです。私は古いメソッドを実装した後、すべて正常に動作します。

0

は、私は私の問題を発見し、この

if(!savedBirthdateString.equals("")) 
{ 
    String[] splitBirthdateString = savedBirthdateString.split("\\."); 


    int strYear = Integer.parseInt(splitBirthdateString[2]); 
    int strMonth = (Integer.parseInt(splitBirthdateString[1])) - 1 ; 
    int strDay = Integer.parseInt(splitBirthdateString[0]); 

    Calendar c = Calendar.getInstance(); 
    c.set(strYear,strMonth,strDay); 


    year = c.get(Calendar.YEAR); 
    month = c.get(Calendar.MONTH); 
    day = c.get(Calendar.DAY_OF_MONTH); 

}   
else{ 
    // Use the current date as the default date in the picker 
    final Calendar c = Calendar.getInstance(); 
    year = c.get(Calendar.YEAR); 
    month = c.get(Calendar.MONTH); 
    day = c.get(Calendar.DAY_OF_MONTH); 

} 
+0

速い答えのためのthx。私はif節を修正しましたが、それはまったく問題ではありません。アンドロイド5と6ではうまく動作します。しかし、再びthx :-) – user1256722

関連する問題