java.lang.InstantiationException:class没有零参数构造函数

时间:2015-04-29 14:42:33

标签: android broadcastreceiver

我正在尝试使用BroadcastReceiver作为内部类来跟踪网络状态,但我在标题中得到了异常。我该怎么做才能解决这个问题?

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifi.isAvailable() || mobile.isAvailable()) {
            setupData();
            Log.d("Netowk Available ", "Flag No 1");
        }
    }
}

4 个答案:

答案 0 :(得分:90)

你的

  

内部广播接收器必须是静态的(通过Manifest注册)

OR

  

非静态广播接收器必须在父类

内注册和注销

为此。

我使用的是内置广播接收器,没有在课堂上注册。要么将它设置为静态并在Manifest中注册,要么将其设置为非静态,并在父类中注册和取消注册。

答案 1 :(得分:16)

无法通过AndroidManifest.xml注册非静态内部类。你可以:

动态注册,如this thread中所述,并删除空构造函数。

或者,

让您的内部类静态,并在AndroidManifext.xml中注册。

答案 2 :(得分:0)

只需将您的Receiver类设为静态,如:

public [static] class ReceiverClass extends BroadcastReceiver

答案 3 :(得分:-2)

e ~~我刚刚遇到这个问题,我将课程NetworkChangeReceiver重构到另一个地方