Android: не удается создать экземпляр C2DMBaseReceiver

#android #android-c2dm

#Android #android-c2dm

Вопрос:

Я напрямую скопировал все три класса C2DM в свой проект из расширения ChomeToPhone от Google Code (http://code.google.com/p/chrometophone/…/c2dm ), а затем изменил мой манифест в соответствии с инструкциями на странице Android Cloud для платформы обмена сообщениями устройств. Когда я запускаю свою программу, я получаю следующую ошибку. Я не могу понять, что происходит и почему:

 06-12 18:50:43.243: ERROR/AndroidRuntime(923): FATAL EXCEPTION: main
06-12 18:50:43.243: ERROR/AndroidRuntime(923): java.lang.RuntimeException: Unable to instantiate receiver com.name.asdf.C2DMBaseReceiver: java.lang.InstantiationException: com.name.asdf.C2DMBaseReceiver
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2789)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.app.ActivityThread.access$3200(ActivityThread.java:125)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.os.Looper.loop(Looper.java:123)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at java.lang.reflect.Method.invokeNative(Native Method)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at java.lang.reflect.Method.invoke(Method.java:521)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at dalvik.system.NativeStart.main(Native Method)
06-12 18:50:43.243: ERROR/AndroidRuntime(923): Caused by: java.lang.InstantiationException: com.name.asdf.C2DMBaseReceiver
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at java.lang.Class.newInstanceImpl(Native Method)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at java.lang.Class.newInstance(Class.java:1429)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2780)
06-12 18:50:43.243: ERROR/AndroidRuntime(923):     ... 10 more
  

Ответ №1:

C2DMBaseReceiver это абстрактный класс, вы не можете создать его экземпляр. Вы должны создать подкласс C2DMBaseReceiver и предоставить свою собственную реализацию. Затем зарегистрируйте этот класс в своем манифесте. Обратите внимание, что вы должны поместить этот класс в корневой каталог вашего пакета.

Ответ №2:

C2DMBaseReceiver является абстрактным классом: общедоступный абстрактный класс C2DMBaseReceiver расширяет IntentService{…}

Абстрактные классы не могут быть созданы, но они могут быть подклассами.