Android 内部类广播错误.MainActivity$MyReceiver; no empty constructor
2016-07-13 10:53
483 查看
广播的定义,如果是内部类,必须为静态类
http://blog.csdn.net/chdjj/article/details/19496567
下面总结一下作为内部类的广播接收者在注册的时候需要注意的地方:
1.清单文件注册广播接收者时,广播接收者的名字格式需要注意。因为是内部类,所以需要在内部类所在的类与内部类之间加上$符号:
[html] view
plaincopy
android:name="com.example.brocastdemo.MainActivity$MyReceiver"
2.内部类在声明时一定要写成静态内部类(class关键字前加上static)。否则会抛出类似这样的异常:
[html] view
plaincopy
02-19 09:11:14.650: E/AndroidRuntime(1771): java.lang.RuntimeException: Unable to instantiate receiver com.example.brocastdemo.MainActivity$MyReceiver: java.lang.InstantiationException: can't instantiate class com.example.brocastdemo.MainActivity$MyReceiver; no empty constructor
大家可能会发现,采用静态注册的作为内部类的广播接收者使用起来很不方便,因为是静态内部类,所以该类中如果想使用外部类的变量/方法,该变量/方法也得是静态的。
所以还是强烈推荐大家使用动态方式注册,下面将例子改为动态方式注册。
http://blog.csdn.net/chdjj/article/details/19496567
下面总结一下作为内部类的广播接收者在注册的时候需要注意的地方:
1.清单文件注册广播接收者时,广播接收者的名字格式需要注意。因为是内部类,所以需要在内部类所在的类与内部类之间加上$符号:
[html] view
plaincopy
android:name="com.example.brocastdemo.MainActivity$MyReceiver"
2.内部类在声明时一定要写成静态内部类(class关键字前加上static)。否则会抛出类似这样的异常:
[html] view
plaincopy
02-19 09:11:14.650: E/AndroidRuntime(1771): java.lang.RuntimeException: Unable to instantiate receiver com.example.brocastdemo.MainActivity$MyReceiver: java.lang.InstantiationException: can't instantiate class com.example.brocastdemo.MainActivity$MyReceiver; no empty constructor
大家可能会发现,采用静态注册的作为内部类的广播接收者使用起来很不方便,因为是静态内部类,所以该类中如果想使用外部类的变量/方法,该变量/方法也得是静态的。
所以还是强烈推荐大家使用动态方式注册,下面将例子改为动态方式注册。
相关文章推荐
- 【女朋友系列之找女朋友篇】简单工厂模式,工厂模式,抽象工厂模式
- Android-ScrollView滚动条的使用
- android 源码名称及路径
- Android图片处理
- android 获取时间
- ThinkAndroid 交流平台
- android自定义view三(draw和ondraw)
- Android四大组件
- android开发中涉及到的度量单位
- Android ListView获得选项中的值
- Android单元测试框架
- Android 蓝牙 BLE 开发笔记
- Android中关于Fragment的使用和Fragment的生命周期
- Android中的broadcast
- jni的使用
- android 虚线
- android股票联动_第一列固定其他列可左右上下滑动
- JCenter下载太慢?教你修改Maven仓库地址为国内镜像
- Android实战技巧:ViewStub的应用
- Android中的service