java.lang.InstantiationException: class has no zero argument constructor

筅森魡賤 提交于 2019-12-17 16:12:32

问题


I am trying to use a BroadcastReceiver as an inner class to track the network state but I got the exception in the title. What should I do to fix this problem?

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");
        }
    }
}

回答1:


Your

inner Broadcast receiver must be static ( to be registered through Manifest)

OR

Non-static broadcast receiver must be registered and unregistered inside the Parent class

for this.

I was using an Inner broadcast reciver, without registering it within the class. Either make it static and register in Manifest , or Make it non static and register and unregister inside the parent class .




回答2:


A non-static inner class cannot be registered via the AndroidManifest.xml. You can either:

Register it dynamically as outlined in this thread, and remove the empty constructor.

Or,

Make your inner class static, and register it in the AndroidManifext.xml.




回答3:


just make your Receiver Class static like:

public [static] class ReceiverClass extends BroadcastReceiver




回答4:


e~~I just meet that problem,and I refactor the class NetworkChangeReceiver to an another place



来源:https://stackoverflow.com/questions/29947038/java-lang-instantiationexception-class-has-no-zero-argument-constructor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!