PendingIntent好像在初始化的时候就开始了
PendingIntent seems to start when initializing
该应用程序的计划是每天 7 点 a.m 触发通知,这实际上已经起作用了。问题是应用程序第一次启动时,它会要求提供登录数据,这通常也能正常工作,但如果用户提交速度不够快,应用程序就会崩溃。
这是在用户尚未提交时运行的 MainActivity 中的代码:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Intent intent1 = new Intent(this, NotificationClass.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 100, intent1, 0);
AlarmManager am = (AlarmManager) getSystemService(MainActivity.this.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
我猜 NotificationClass 正在启动,因为崩溃的 "source" 是由 NotificationClass 启动的 loadText.java 的代码。该计划实际上只在每天 7 a.m 开始。如前所述。
有人知道这个问题或有想法吗?我已经尝试过不同的标志。
提前致谢!
logcat 中的错误:
08-22 14:54:02.217 2762-2762/de.kurt.vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.kurt.vertretungsplan, PID: 2762
java.lang.NullPointerException: Attempt to invoke virtual method 'org.jsoup.select.Elements org.jsoup.nodes.Element.select(java.lang.String)' on a null object reference
at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:112)
at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:35)
at android.os.AsyncTask.finish(AsyncTask.java:667)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
08-22 14:54:02.232 1247-1293/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
08-22 14:54:02.295 1462-3018/system_process E/EGL_emulation: tid 3018: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
您获得一个 Calendar
实例并将时间设置为 7:00:00。这会将当天的 Calendar
时间设置为 7:00:00。
然后你这样做:
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
这会设置一个闹钟,该闹钟将在今天 7:00:00 响起,然后每天在 7:00:00 响起。假设你运行这个代码在7:00:00之后,闹钟会立即触发,因为闹钟时间已经过去了。
为防止出现这种情况,您需要确保 Calendar
时间大于当前时间。如果不是,您应该在调用 am.setRepeating()
.
之前将 Calendar
时间增加一天
作为@MikeM。建议,请参阅 了解更多详情。
该应用程序的计划是每天 7 点 a.m 触发通知,这实际上已经起作用了。问题是应用程序第一次启动时,它会要求提供登录数据,这通常也能正常工作,但如果用户提交速度不够快,应用程序就会崩溃。
这是在用户尚未提交时运行的 MainActivity 中的代码:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Intent intent1 = new Intent(this, NotificationClass.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 100, intent1, 0);
AlarmManager am = (AlarmManager) getSystemService(MainActivity.this.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
我猜 NotificationClass 正在启动,因为崩溃的 "source" 是由 NotificationClass 启动的 loadText.java 的代码。该计划实际上只在每天 7 a.m 开始。如前所述。 有人知道这个问题或有想法吗?我已经尝试过不同的标志。
提前致谢!
logcat 中的错误:
08-22 14:54:02.217 2762-2762/de.kurt.vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.kurt.vertretungsplan, PID: 2762
java.lang.NullPointerException: Attempt to invoke virtual method 'org.jsoup.select.Elements org.jsoup.nodes.Element.select(java.lang.String)' on a null object reference
at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:112)
at de.kurt.vertretungsplan.loadText$loadTextAsyncTask.onPostExecute(loadText.java:35)
at android.os.AsyncTask.finish(AsyncTask.java:667)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
08-22 14:54:02.232 1247-1293/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
08-22 14:54:02.295 1462-3018/system_process E/EGL_emulation: tid 3018: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
您获得一个 Calendar
实例并将时间设置为 7:00:00。这会将当天的 Calendar
时间设置为 7:00:00。
然后你这样做:
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
这会设置一个闹钟,该闹钟将在今天 7:00:00 响起,然后每天在 7:00:00 响起。假设你运行这个代码在7:00:00之后,闹钟会立即触发,因为闹钟时间已经过去了。
为防止出现这种情况,您需要确保 Calendar
时间大于当前时间。如果不是,您应该在调用 am.setRepeating()
.
Calendar
时间增加一天
作为@MikeM。建议,请参阅