- "Exception sur collection" ? C'est censé vouloir dire quelque chose ?
- Ici le problème est que tu essaies d'utiliser une classe qui n'existe pas dans ta version de Java. En chargeant ta classe il doit d'abord charger la classe TrafficStats, qui n'existe pas, donc le chargement de ta classe échoue.
Si la classe ne se charge pas, il n'y a pas la moindre chance d'appeler sa méthode DonneTraficTéléchargement()*, et donc ce n'est pas d'entourer ça de try / catch qui va résoudre quoi que ce soit.
Je ne sais pas pour Android, mais en Java classique, la solution c'est la réflexivité. Plutôt que d'utiliser au compile-time la classe TrafficStats, chercher si elle existe au runtime.
Utiliser
Class<?> trafficStatClass = Class.forName("android.net.TrafficStats")
pour vérifier si elle existe et si oui, mettre la main sur sa Class.
À partir de là, je suppose que tu sais lire la JavaDoc de Class et que tu as pas besoin que je t'explique ce que ça fait.
Ensuite tu récupères par réflexivité la méthode à appeler sur cette classe :
Method uidRxBytesMethod = trafficStatClass.getMethod("getUidRxBytes", Integer.TYPE);
puis tu appelles cette méthode. Elle est statique, donc on peut donner null à la place de l'instance sur laquelle l'appliquer.
uidRxBytesMethod.invoke(null, uid);
Ce qui renvoie un objet Long, qui, si j'ai bien compris, vaudra -1 si l'opération n'est pas gérée.
Bien sûr, plusieurs choses peuvent échouer en tentant de faire ça, notamment la classe TrafficStats qui n'existe pas. Du coup c'est effectivement une bonne idée d'entourer tout ça de try / catch, cette fois-ci, puisque le bloc try sera parcouru, ça marchera.
* au fait, un nom de méthode devrait commencer par une minuscule. Question d'usage et de compatibilité avec les systèmes à introspection. (Et je conseille pas spécialement de mettre des accents, mais je suppose que ça c'est pour l'exemple.)
Partager