0

スケジューラアプリケーションを作成しています。AlarmManagerその中で、とを使用して複数のイベントを設定していますPendingIntent。私は次の方法を使用します:

PendingIntentここで配列を宣言します:

public static ArrayList <PendingIntent> intentArray= new ArrayList <PendingIntent>();

ここでは、配列にインテントを追加しています。

PendingIntent pendingIntent = PendingIntent.getBroadcast(
        EditScheduleActivity.this, intentid, notifyintent,
        PendingIntent.FLAG_UPDATE_CURRENT); //intent id is unique

alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        pendingIntent);
MainActivity.intentArray.add(pendingIntent);

ここで私はアラームをクリアしています:

EditScheduleActivity.alarmManager.cancel(intentArray.get(selecteditemid_int));
intentArray.remove(selecteditemid_int);

しかし、アラームをクリアするArrayIndexOutOfBoundsExceptionと、問題が発生します。アプリケーションを再起動すると、インテント配列リストが再初期化され、例外がスローされることが問題だと思います。インテント配列リストを再初期化しないようにすることで、この問題をどのように克服できますか?

4

2 に答える 2

0

問題は、アプリケーションを再起動すると、インテント配列リストが再初期化されて例外がスローされることだと思います。

あなたの場合はSharepreference or database、arraylistをshareprenceに保存しintentArray.remove(selecteditemid_int);、SPを更新するときに使用する必要があるため、次回は最後に保存された値が表示されます。以下のリンクを確認してください。

Android アプリケーションで設定 API を使用する

スタックオーバーフローの回答

于 2013-03-01T05:22:38.570 に答える
-1

これは特に Android とはほとんど関係ありません。は、次のArrayOutOfBoundsExceptionことを意味します。

intentArray.remove(selecteditemid_int);

が配列のselecteditemid_int長さを超えています。

于 2013-03-01T05:13:19.593 に答える