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

Kar*_*lam 38 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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ajj*_*jji 100

您的

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

要么

非静态广播接收器必须在Parent类内注册和注销

为了这.

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

  • 与作为内部类实现的Activity有同样的问题.相同的解决方案 - 将内部类声明为静态修复它. (3认同)

Meh*_*t K 16

非静态内部类不能通过注册AndroidManifest.xml.你可以:

按照此线程中的概述动态注册它,并删除空构造函数.

要么,

使你的内部类静态,并在其中注册AndroidManifext.xml.

  • 啊哈,事实证明这就是问题所在.Android无法通过AndroidManifest.xml(BroadcastReceiver上的Android开发人员文档)实例化(非静态)内部类.检查[此主题](http://stackoverflow.com/questions/3608955/receiver-as-inner-class-in-android),并动态注册您的接收器. (2认同)