2016-03-21 12 views
0

DatePickerを使用するためにここで見つけたTimePickerを変更しました。 TimePickerは、指定された時間、長い形式でミリ秒を格納する際に問題なく動作しますが、SimpleDateFormatに変更して文字列を格納するとかなりエラーになります。ここでDatePickerDialogが永続化されていないString/crashing

は私の人生のために

import android.content.Context; 
import android.content.res.TypedArray; 
import android.preference.DialogPreference; 
import android.util.AttributeSet; 
import android.view.View; 

import java.text.SimpleDateFormat; 
import java.util.Calendar; 

public class DateSelector extends DialogPreference 
{ 
    private Calendar calendar; 
    private android.widget.DatePicker picker = null; 

    public DateSelector(Context ctxt) { 
     this(ctxt, null); 
    } 
    public DateSelector(Context ctxt, AttributeSet attrs) { 
     this(ctxt, attrs, android.R.attr.dialogPreferenceStyle); 
    } 
    public DateSelector(Context ctxt, AttributeSet attrs, int defStyle) { 
     super(ctxt, attrs, defStyle); 
     setPositiveButtonText("Save"); 
     setNegativeButtonText("Cancel"); 
     calendar = Calendar.getInstance(); 
    } 
    @Override 
    protected View onCreateDialogView() { 
     picker = new android.widget.DatePicker(getContext()); 
     return (picker); 
    } 
    @Override 
    protected void onBindDialogView(View v) { 
     super.onBindDialogView(v); 
     picker.updateDate(
       calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); 
    } 
    @Override 
    protected void onDialogClosed(boolean positiveResult) { 
     super.onDialogClosed(positiveResult); 

     if (positiveResult) 
     { 
      updateCalendar(picker.getDayOfMonth(), picker.getMonth(), picker.getYear()); 

      setSummary(getSummary()); 

      if (callChangeListener(calendar.getTimeInMillis())) { 
       SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); 
       //persistString(format.format(calendar.getTime()); 
       notifyChanged(); 
      } 
     } 
    } 
    @Override 
    protected Object onGetDefaultValue(TypedArray a, int index) { 
     return (a.getString(index)); 
    } 
    @Override 
    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) 
    { 
     if (restoreValue) 
     { 
      if (defaultValue == null) { 
       updateCalendar(
         calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR)); 
      } else { 
       String[] split = defaultValue.toString().split("-"); 
       updateCalendar(
         Integer.parseInt(split[1]), Integer.parseInt(split[0]), Integer.parseInt(split[2])); 
      } 
     } else { 
      if (defaultValue == null) { 
       updateCalendar(
         calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR)); 
      } else { 
       String[] split = defaultValue.toString().split("-"); 
       updateCalendar(
         Integer.parseInt(split[1]), Integer.parseInt(split[0]), Integer.parseInt(split[2])); 
      } 
     } 
     setSummary(getSummary()); 
    } 
    public void updateCalendar(int day, int month, int year) { 
     calendar.set(Calendar.DAY_OF_MONTH, day); 
     calendar.set(Calendar.MONTH, month); 
     calendar.set(Calendar.YEAR, year); 
    } 
    @Override 
    public CharSequence getSummary() { 
     if (calendar != null) { 
      SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); 
      return format.format(calendar.getTime()); 
     } 
     return null; 
    } 
} 

、私のコードですが、私はそれがpersistString方法にクラッシュするようには機能し得ていないことができます。私はこれを正しく使用しているという印象を受けています。問題にいくつかの知恵を持つ人はいますか?ここで

は私のlogcatです:

とjava.lang.ClassCastException:java.lang.Longのはandroid.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java で java.lang.Stringで にキャストすることはできません:android.preference.Preference.persistStringにおける224) でandroid.preference.Preference.getPersistedString(Preference.java:1429) (Preference.java:1398)

私は文字列を格納しようとしているので、なぜこれを与えているのでしょうか。ここで

<Utilities.DateSelector 
     android:title="Year/Month/Day " 
     android:key="date" 
     android:dependency="birthday"/> 

おかげで、また、環境設定画面です。

+0

Logcat please ... –

+0

Rusheelメインポストを更新しました。 – woahguy

+0

どこにエラーが表示されますか。コードをハイライトしてください。 –

答えて

0

問題はメソッドがStringを期待しているにもかかわらず、longを渡しているという問題です。これを試してください:

persistString("" + format.format(calendar.getTime()); 

このコード行は、long値をStringに変換します。

+0

これは間違いなく動作しません。 format()は文字列を返し、persistString()はStringを返します。サイコロはありません。 ""は何も変更しません。 – woahguy

関連する問題