안녕하세요.

 

이런거 질문 하면 안 좋은 소리 듣는 거, 잘 알지만..

 

그래도 올리겠습니다..

 

한번만 봐주세요...

 

 

 

아랫쪽  빨간 글씨 쪽이 null pointerException 에러 가 발생 되는데.. 도통 모르겠습니다..

 

 

코드 가 많이 길 것 같습니다만.. 아무쪼록 넓은 마음으로 이해해 주시고, 도와주시면 정말 행복하고, 감사 할 것 같습니다..

 

 

 

 

 

===========================================================

 

 

 

public class DigitalClock extends LinearLayout {

    private final static String M12 = "h:mm";

    private Calendar mCalendar;
    private String mFormat;
    private TextView mTimeDisplay;
    private AmPm mAmPm;
    private boolean mAnimate;
    private ContentObserver mFormatChangeObserver;
    private boolean mLive = true;
    private boolean mAttached;

    /* called by system on minute ticks */
    private final Handler mHandler = new Handler();
    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (mLive && intent.getAction().equals(
                            Intent.ACTION_TIMEZONE_CHANGED)) {
                    mCalendar = Calendar.getInstance();
                }
                updateTime();
            }
        };

    static class AmPm {
        private int mColorOn, mColorOff;

        private LinearLayout mAmPmLayout;
        private TextView mAm, mPm;

        AmPm(View parent) {
            mAmPmLayout = (LinearLayout) parent.findViewById(R.id.am_pm);
            mAm = (TextView)mAmPmLayout.findViewById(R.id.am);
            mPm = (TextView)mAmPmLayout.findViewById(R.id.pm);

            Resources r = parent.getResources();
            mColorOn = r.getColor(R.color.ampm_on);
            mColorOff = r.getColor(R.color.ampm_off);
        }

        void setShowAmPm(boolean show) {
            mAmPmLayout.setVisibility(show ? View.VISIBLE : View.GONE);
        }

        void setIsMorning(boolean isMorning) {
            mAm.setTextColor(isMorning ? mColorOn : mColorOff);
            mPm.setTextColor(isMorning ? mColorOff : mColorOn);
        }
    }

    private class FormatChangeObserver extends ContentObserver {
        public FormatChangeObserver() {
            super(new Handler());
        }
       
        public void onChange(boolean selfChange) {
         setDateFormat(null);
            updateTime();
        }
    }

    public DigitalClock(Context context) {
        this(context, null);
    }

    public DigitalClock(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();

        mTimeDisplay = (TextView) findViewById(R.id.timeDisplay);
        mAmPm = new AmPm(this);
        mCalendar = Calendar.getInstance();
        setDateFormat(null);
       
    }

    protected void onAttachedToWindow(Context mContext) {
        super.onAttachedToWindow();

        if (Log.LOGV) Log.v("onAttachedToWindow " + this);

        if (mAttached) return;
        mAttached = true;

        if (mAnimate) {
            setBackgroundResource(R.drawable.animate_circle);
            /* Start the animation (looped playback by default). */
            ((AnimationDrawable) getBackground()).start();
        }

        if (mLive) {
            /* monitor time ticks, time changed, timezone */
            IntentFilter filter = new IntentFilter();
            filter.addAction(Intent.ACTION_TIME_TICK);
            filter.addAction(Intent.ACTION_TIME_CHANGED);
            filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
            mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
        }

        /* monitor 12/24-hour display preference */
        mFormatChangeObserver = new FormatChangeObserver();
        mContext.getContentResolver().registerContentObserver(
                Settings.System.CONTENT_URI, true, mFormatChangeObserver);

        updateTime();
    }
   
    protected void onDetachedFromWindow(Context mContext) {
        super.onDetachedFromWindow();

        if (!mAttached) return;
        mAttached = false;

        Drawable background = getBackground();
        if (background instanceof AnimationDrawable) {
            ((AnimationDrawable) background).stop();
        }

     
  if (mLive) {
            mContext.unregisterReceiver(mIntentReceiver);
        }
        mContext.getContentResolver().unregisterContentObserver(
                mFormatChangeObserver);
    }


    void updateTime(Calendar c) {
        mCalendar = c; updateTime();

        updateTime();
     
    }

    private void updateTime() {
        if (mLive) {
            mCalendar.setTimeInMillis(System.currentTimeMillis());
        }

        CharSequence newTime = DateFormat.format(mFormat, mCalendar);
        mTimeDisplay.setText(newTime);
        mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
    }

    private void setDateFormat(Context mContext) {
        mFormat = Alarms.get24HourMode(mContext) ? Alarms.M24 : M12;
        mAmPm.setShowAmPm(mFormat == M12);
    }

    void setAnimate() {
        mAnimate = true;
    }

    void setLive(boolean live) {
        mLive = live;
    }
}

 

 

======================================================================

 

10-05 18:53:58.413: E/AndroidRuntime(26722): FATAL EXCEPTION: main
10-05 18:53:58.413: E/AndroidRuntime(26722): java.lang.NullPointerException
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.text.SpannableStringBuilder.<init>(SpannableStringBuilder.java:43)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.text.format.DateFormat.format(DateFormat.java:433)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at com.android.alarmclock.DigitalClock.updateTime(DigitalClock.java:183)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at com.android.alarmclock.DigitalClock.updateTime(DigitalClock.java:175)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at com.android.alarmclock.AlarmClock$AlarmTimeAdapter.bindView(AlarmClock.java:131)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.CursorAdapter.getView(CursorAdapter.java:250)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.AbsListView.obtainView(AbsListView.java:2214)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.ListView.onMeasure(ListView.java:1155)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.View.measure(View.java:12897)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.View.measure(View.java:12897)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.View.measure(View.java:12897)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.View.measure(View.java:12897)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2256)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.View.measure(View.java:12897)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1197)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2583)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.os.Looper.loop(Looper.java:137)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at android.app.ActivityThread.main(ActivityThread.java:4507)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at java.lang.reflect.Method.invokeNative(Native Method)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at java.lang.reflect.Method.invoke(Method.java:511)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
10-05 18:53:58.413: E/AndroidRuntime(26722):  at dalvik.system.NativeStart.main(Native Method)