web-dev-qa-db-fra.com

java.lang.InstantiationException: la classe n'a pas de constructeur à argument zéro

J'essaie d'utiliser une BroadcastReceiver en tant que classe interne pour suivre l'état du réseau, mais le titre contient l'exception. Que dois-je faire pour résoudre ce problème? 

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");
        }
    }
}
33
Karim Abdell Salam

Votre 

le récepteur de diffusion interne doit être statique (pour être enregistré via Manifest) 

OR

Le récepteur de diffusion non statique doit être enregistré et désenregistré dans la classe parent. 

pour ça.

J'utilisais un récepteur de diffusion Inner, sans l'enregistrer dans la classe. Rendez-le statique et enregistrez-vous dans Manifest, ou rendez-le non statique et enregistrez et annulez l'enregistrement à l'intérieur de la classe parente.

84
Ajji

Une classe interne non statique ne peut pas être enregistrée via le AndroidManifest.xml. Tu peux soit:

Enregistrez-le dynamiquement comme indiqué dans ce fil , et supprimez le constructeur vide.

Ou,

Rendez votre classe interne statique et enregistrez-la dans le AndroidManifext.xml.

16
Mehmet K

il suffit de rendre votre classe de récepteur statique comme:

public [static] class ReceiverClass extends BroadcastReceiver

0
Hadi