2

しばらくの間、エラーが発生していたことがわかりました。保存したいオブジェクトごとに ArrayList があります。AlarmManager に使用される保留中のインテントのリストが必要です。そのようにして、各オブジェクトから複数のアラームを削除したい場合は、リストにアクセスするだけです。 PendingIntents の配列リスト全体で単に alarmmanagername.cancel(PendingIntent) を使用します。しかし、これらのオブジェクトは格納する必要があり、格納されたオブジェクトを取得すると、Arraylist は null に設定されます。これは、オブジェクト データ ストアを保持し、NotSerializableException をスローせずにシステムに取得するために、arraylist を一時的に設定する必要があったためです。クラスの設定方法は次のとおりです。

public class ListObject implements Serializable{

    public String objectname, startampm, stopampm;  //name of schedule and am or pm
    private boolean[] Days = {
            false,  //monday
            false,  //tuesday
            false,  //and soforth
            false,
            false,
            false,
            false};

    private int starthour, startminute, stophour, stopminute;   //times from TimePicker
    public transient ArrayList<PendingIntent> pendintentlist = new ArrayList<PendingIntent>();; //ids for each of the alarms
    private int listalarmid;    //FOR WHEN COME BACK: maybe store pending intents instead of the array of ints above?
    private boolean vibrate, activated;
    private boolean nextday = false; //bool for if schedule goes into next day

私が理解していることから、トランジェントは残りのデータと一緒に保存できない場所に到達しますが、このシリアル化できないオブジェクトを残りのデータと一緒に保存するにはどうすればよいですか? nullにならずにこの配列リスト?

そうでない場合、保存したいアラームマネージャーを後でキャンセルできる簡単な方法はありますか? 複数のアラームを保存できるシンプルなアプリですが、保留中のインテントを保存する方法が必要です。

4

1 に答える 1

0

残りの状態で保存されるように設計されているか、保存されていないかのどちらかであるため、一時データで何をしようとしているのかわかりません。

  • APendingIntendはまだParceableなのでBundle、たとえばonSaveInstanceStateonRestoreInstanceState

  • 一時データは「構成」されている場合があります。つまり、状態は直接保存されませんが、必要に応じて、再作成に必要なデータを保存できます。たとえば、データベース接続はシリアル化できませんが、ユーザー名、パスワード、およびJDBCURLを保存できる場合があります。

  • writeObject(ObjectOutputStream out)Javaシリアル化メソッドをオーバーライド(または実装)して、このスレッドreadObject(ObjectInputStream in)などの一時フィールドを追加できます

于 2013-03-18T01:36:50.877 に答える