Android广播错误.MainActivity$MyReceiver; no empty constructor
2016-07-18 21:30
369 查看
广播的定义,如果是内部类,必须为静态类.
下面总结一下作为内部类的广播接收者在注册的时候需要注意的地方:
1.清单文件注册广播接收者时,广播接收者的名字格式需要注意。因为是内部类,所以需要在内部类所在的类与内部类之间加上$符号:
2.内部类在声明时一定要写成静态内部类(class关键字前加上static)。否则会抛出类似这样的异常:
[b][b][b]3.静态内部类里面的控件也需要写成static[/b][/b][/b]
大家可能会发现,采用静态注册的作为内部类的广播接收者使用起来很不方便,因为是静态内部类,所以该类中如果想使用外部类的变量/方法,该变量/方法也得是静态的。
所以还是强烈推荐大家使用动态方式注册。
下面总结一下作为内部类的广播接收者在注册的时候需要注意的地方:
1.清单文件注册广播接收者时,广播接收者的名字格式需要注意。因为是内部类,所以需要在内部类所在的类与内部类之间加上$符号:
<receiver android:name=".MainActivity$MyReciver"> <intent-filter> <action android:name="com.qianfeng.1605"></action> </intent-filter> </receiver>
2.内部类在声明时一定要写成静态内部类(class关键字前加上static)。否则会抛出类似这样的异常:
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
[b][b][b]3.静态内部类里面的控件也需要写成static[/b][/b][/b]
static TextView tv_name; static TextView tv_password;
public static class MyReciver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,intent.getStringExtra("name"),Toast.LENGTH_SHORT).show(); Toast.makeText(context,intent.getStringExtra("password"),Toast.LENGTH_SHORT).show(); tv_name.setText(intent.getStringExtra("name")); tv_password.setText(intent.getStringExtra("password")); } }
大家可能会发现,采用静态注册的作为内部类的广播接收者使用起来很不方便,因为是静态内部类,所以该类中如果想使用外部类的变量/方法,该变量/方法也得是静态的。
所以还是强烈推荐大家使用动态方式注册。
相关文章推荐
- Android 常用 adb 命令总结
- Android第三十五天
- Android第三十六天
- android studio adb隔段时间总是被重启的元凶终于被找到了
- Android第三十四天
- Activity中的四种启动模式
- 关于android.os.Process.killProcess的使用问题
- Android Fragment + ViewPager +LazyLoad的应用
- Android 的权限设置大全
- 我们手指触碰屏幕都做了什么?
- Android 快速开发系列 ORMLite 框架最佳实践
- Android ORMLite 框架的入门用法
- Android WebView与JavaScript交互详解
- 调用百度地图Android API,模拟器地图可以加载,手机无法加载问题
- 菜单和弹出窗口
- android动态设置控件大小
- Android背景渐变色(shape,gradient)
- Android知识点目录
- Android DecorView浅析
- Android常用--正则,广播和as快捷键