0

私のcountdownTimerは次のとおりです

public class MyCountDownTimer extends CountDownTimer implements Parcelable
{

    Context mContext;

    long tempMillisInFuture     = 0;
    long tempCountDownInterval  = 0;

    Ringtone mRingTone      = null;
    Vibrator mVibratorObj   = null;
    List<Object> mlistObjs  = null;

    int isVibratingOn       = 0;

    public MyCountDownTimer(long millisInFuture, long countDownInterval, Ringtone ringTone, Context context, List<Object> listObjs) 
    {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
        mRingTone   = ringTone;
        mContext    = context;
        mlistObjs   = listObjs;

        tempMillisInFuture      = millisInFuture;
        tempCountDownInterval   = countDownInterval;
    }

    @Override
    public void onFinish() 
    {

    }
    @Override
    public void onTick(long millisUntilFinished) 
    {
        // TODO Auto-generated method stub
        try 
        {
            System.out.println(" millisUntilFinished  ..................... ............. "+millisUntilFinished);
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

    }
}



次のように CountDownTimer のオブジェクトを作成しました

timer = new MyCountDownTimer(10000, 1000, ringTone, context, listObjs);
timer.start();


バンドルに追加

Bundle bundle = new Bundle();
bundle.putParcelable("Timer", timer);


その他の活動の開始

Intent intentPopUp = new Intent(context, DialogPopUp.class);
intentPopUp.putExtras(bundle);
startActivity(intentPopUp);


DialogPopUp.java ファイル で、タイマー オブジェクトを取得しようとしましたが、例外が発生しました

MyCountDownTimer timer = (MyCountDownTimer)bundle.getParcelable("Timer");



例外は:

android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.iprospl.iprohabittrackbeta.iproreminder.MyCountDownTimer
    at android.os.Parcel.readParcelable(Parcel.java:1975)
    at android.os.Parcel.readValue(Parcel.java:1854)
    at android.os.Parcel.readMapInternal(Parcel.java:2094)
    at android.os.Bundle.unparcel(Bundle.java:223)
    at android.os.Bundle.getBoolean(Bundle.java:761)
    at com.iprospl.iprohabittrackbeta.iproreminder.ReminderDialogPopUp.onCreate(ReminderDialogPopUp.java:97)
    at android.app.Activity.performCreate(Activity.java:4465)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    at android.app.ActivityThread.access$600(ActivityThread.java:123)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    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:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)


パーセル可能なオブジェクトを作成するために何かが欠けている 可能性があります。
誰かが知っているなら、私に答えてください。
ありがとうございました。

4

1 に答える 1

0

すべての Parcelable には、次の 2 つのメソッドを実装する CREATOR が必要です。

public static final Parcelable.Creator<MyCountDownTimer> CREATOR = new Parcelable.Creator<MyCountDownTimer>() {
    public MyCountDownTimer createFromParcel(Parcel in) {
        return new MyCountDownTimer(in);
    }

    public MyCountDownTimer[] newArray(int size) {
        return new MyCountDownTimer[size];
    }
};
于 2013-03-22T11:41:25.530 に答える