zoukankan      html  css  js  c++  java
  • Android广播错误.MainActivity$MyReceiver; no empty constructor

    广播的定义,如果是内部类,必须为静态类.

    下面总结一下作为内部类的广播接收者在注册的时候需要注意的地方
     
    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 
     
     
    3.静态内部类里面的控件也需要写成static

    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"));
    }
    }
     
    大家可能会发现,采用静态注册的作为内部类的广播接收者使用起来很不方便,因为是静态内部类,所以该类中如果想使用外部类的变量/方法,该变量/方法也得是静态的。
    所以还是强烈推荐大家使用动态方式注册。
     
     
     
     
     
  • 相关阅读:
    poj 3264(RMQ或者线段树)
    LCA上的RMQ模板算法
    LCA离线算法Tarjan的模板
    poj 1330(初探LCA)
    hdu 3367(与最大生成树无关。无关。无关。重要的事情说三遍+kruskal变形)
    hdu 4496(并查集逆向添边)
    hdu 1829(继续扩展并查集)
    poj 1182 (扩展并查集)
    hdu 3038(扩展并查集)
    hdu 3371(kruskal)
  • 原文地址:https://www.cnblogs.com/jingmo0319/p/5682715.html
Copyright © 2011-2022 走看看