207 votes

Comment puis-je utiliser getSystemService dans une classe de non-activité (LocationManager) ?

Je ne parviens pas décharger des tâches à partir de la méthode OnCreate activités principale sur une autre classe de faire le gros du travail.

Lorsque j’essaie d’appeler getSystemService de la classe de non-activité, une exception est levée.

Toute aide serait grandement appréciée  :)

LMT.Java :

fyl.Java

2 votes

Addin

0 votes

H

307voto

Labeeb P Points 12645

Vous devez passer votre cadre à votre classe de cinq ans après...
Une solution consiste à faire un constructeur comme suit pour votre `` classe

Donc dans votre activité classe créer l’objet de cinq ans après en `` fonction comme ceci

0 votes

Désolé, je ne comprends pas, un code serait plus utile. En fait, je devrais passer un objet LocationManager à la méthode getLocation... Je ne vois pas vraiment en quoi le fait de passer le contexte à la méthode va m'aider alors que je ne peux même pas appeler getSystemService sans écrire cette classe comme une classe étendue à Activity.

0 votes

Avez-vous essayé ceci ? Dans la fonction onCreate, si vous passez l'accès au contexte par "this".

0 votes

Mais si le lmt ne sera pas exécutée alors fly n'aura pas de contexte

53voto

Maddy Points 227

Vous pouvez opter pour cette solution :

getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);

8 votes

La méthode getActivity() n'est pas définie pour la classe. Cette erreur apparaît.

0 votes

Quel est le type de classe dans laquelle vous l'utilisez ? Il peut s'agir d'une classe réceptrice, d'un fragment, d'une simple classe Java ou de toute autre classe.

0 votes

Vous devez étendre votre activité avec FreagmentActivity au lieu d'une activité. J'espère que cela fonctionnera pour vous... ?

17voto

brenjt Points 5992

Une façon de contourner ce problème est de créer une classe statique pour les instances. Je l'ai beaucoup utilisé dans AS3 et j'ai également obtenu de bons résultats dans le développement d'Android.

Config.java

public final class Config {
    public static MyApp context = null;
}

MonApp.java

public class MyApp extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Config.context = this;
    }
    ...
}

Vous pouvez ensuite accéder au contexte ou en utilisant Config.context

LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = Config.context.getSystemService(context);

4 votes

Le problème que je vois avec cette méthode est qu'elle laisse quelque chose sans protection qui, si quelqu'un devait lui assigner null, produirait probablement un échec catastrophique ?

2 votes

Une variante consiste à placer un private static dans MyApp, puis à ajouter des getters. private static MyApp _context; public static MyApp getContext() { return _context; } ... dans onCreate : _context = this; dans onStop : _context = null; ... Utilisation : MyApp.getContext() .

2 votes

Cela peut entraîner une fuite de mémoire

1voto

dimvolk Points 78

Utiliser cette dans l'activité :

private Context context = this;

........
if(Utils.isInternetAvailable(context){
Utils.showToast(context, "toast");
}
..........

dans Utils :

public class Utils {

    public static boolean isInternetAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
    }

}

0voto

Ruchir Baronia Points 2023

Je ne sais pas si cela vous aidera, mais j'ai fait ceci :

LocationManager locationManager  = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X