cwac-wakeful library - AlarmReceiver中的NullPointerException

时间:2015-01-11 13:41:40

标签: android commonsware-cwac

我已经实现了commonsware清醒库,并且最多可以正常工作。但有时我得到以下例外:

  

01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):无法启动接收器com.commonsware.cwac.wakeful.AlarmReceiver:java.lang.NullPointerException   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):java.lang.RuntimeException:无法启动接收器com.commonsware.cwac.wakeful.AlarmReceiver:java.lang.NullPointerException   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2287)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.app.ActivityThread.access $ 1600(ActivityThread.java:140)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1313)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.os.Handler.dispatchMessage(Handler.java:99)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.os.Looper.loop(Looper.java:137)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.app.ActivityThread.main(ActivityThread.java:4921)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at java.lang.reflect.Method.invokeNative(Native Method)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at java.lang.reflect.Method.invoke(Method.java:511)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1027)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at dalvik.system.NativeStart.main(Native Method)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):引起:java.lang.NullPointerException   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.commonsware.cwac.wakeful.AlarmReceiver.getListener(AlarmReceiver.java:66)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):at com.commonsware.cwac.wakeful.AlarmReceiver.onReceive(AlarmReceiver.java:36)   01-11 04:24:00.018 E / CustomExceptionHandler - 异常statcktrace(7397):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2280)   01-11 04:24:00.018 E / CustomExceptionHandler - Exception statcktrace(7397):... 10 more

正如您所看到的,这起源于AlarmReceiver.getListener()。如果有人能对此有所了解,我会很感激。

我还尝试了一种不同的方法,即避免使用监听器资源xml文件(这是我怀疑此异常的根本原因)。我通过创建一个扩展com.commonsware.cwac.wakeful.AlarmReceiver并覆盖getListener()的自定义类来实现这一点。我还更改了清单文件中的引用。但是,由于某种原因,现在根本不调用sendWakefulWork,并且不执行预定服务。

请帮助。

1 个答案:

答案 0 :(得分:1)

您在清单中缺少com.commonsware.cwac.wakeful <meta-data>,因为line 66 of AlarmReceiver.java是尝试读取该元数据的第一行。我能想到这一点的唯一一次可能只会发生在破碎的ROM或应用程序的黑客版本上(由于某种原因元数据被剥离)。如果是编码错误(例如,您将<meta-data>元素放在错误的位置),它应该始终发生。

  

我是通过创建扩展com.commonsware.cwac.wakeful.AlarmReceiver并覆盖getListener()的自定义类来实现的。

WakefulIntentService不支持这一点。如果您不想使用AlarmReceiver,那很好,但不要致电scheduleAlarms()cancelAlarms()。相反,只需使用sendWakefulWork(),如the "Basic Usage" section of the documentation中所述。