Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser une méthode dans une autre classe (void)

need help <3

    19 avril 2017 à 14:19:58

    Bonjour, désolé pour la question qui peut paraître bête pour certains. 

    J'utilise Android Studio, j'aimerais appeler une méthode que j'ai créé dans une classe "SpinnersAdd" dans mon "MainActivity"

    Après des recherches j'ai fait ce code dans la classe main :

     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }
    
            SpinnersAdd spinner = new SpinnersAdd();
            spinner.CreateSpinner();
    }
    

    et voilà la classe où j'ai ma méthode :

    public class SpinnersAdd extends  MainActivity {
    
    
            public SpinnersAdd(){
    
            }
            public void CreateSpinner(){
    
                ArrayList<String> listChantier = new ArrayList<String>();
                ArrayList<String> listNoms = new ArrayList<String>();
                Spinner spinnerChantier;
                Spinner spinnerNom;
    
    
    
                URL test = null;
    
                System.out.println("Bouton clicked");
    
    
                try {
    
    
    
                    // Connexion à l'URL CHANTIER
                    System.out.println("Connexion URL Chantier.txt");
                    URL urlChantier = new URL("https://fossa.emodus.fr/emodusdev/truc.txt");
                    URLConnection ycChantier = urlChantier.openConnection();
    
                    // Connexion à l'URL nom
                    System.out.println("Connexion URL Chantier.txt");
                    URL urlNom = new URL("https://fossa.emodus.fr/emodusdev/truc2.txt");
                    URLConnection ycNom = urlNom.openConnection();
    
    
                    // Récupération des données CHANTIERS
                    BufferedReader inChantiers = new BufferedReader(new InputStreamReader(
                            ycChantier.getInputStream()));
    
                    // Récupération des données NOMS
                    BufferedReader inNoms = new BufferedReader(new InputStreamReader(
                            ycNom.getInputStream()));
    
    
    
                    // Création de la variable qui va stocker les lignes 1par1
                    String inputLine;
    
                    // Enregistrement dans la liste des CHANTIERS
                    while ((inputLine = inChantiers.readLine()) != null)
                        //  System.out.println(inputLine);
                        listChantier.add(inputLine);
                    inChantiers.close();
    
    
                    // Enregistrement dans la liste des NOMS
                    while ((inputLine = inNoms.readLine()) != null)
                        //  System.out.println(inputLine);
                        listNoms.add(inputLine);
                    inNoms.close();
    
    
    
                    // Adapter pour mettre dans le spinner (CHANTIER)
                    ArrayAdapter<String> adapterChantier = new ArrayAdapter<>(
                            this,
                            android.R.layout.simple_spinner_item,
                            listChantier
                    );
    
                    // Adapter pour mettre dans le spinner (NOMS)
                    ArrayAdapter<String> adapterNom = new ArrayAdapter<>(
                            this,
                            android.R.layout.simple_spinner_item,
                            listNoms
                    );
    
                    // On definit une présentation du spinner quand il est déroulé (android.R.layout.simple_spinner_dropdown_item)
                    adapterChantier.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    adapterNom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
                    // On trouve le spinner à associer par ID
                    spinnerChantier = (Spinner) findViewById(R.id.spinnerChantier);
                    spinnerNom = (Spinner) findViewById(R.id.spinnerNom);
    
                    //Enfin on passe l'adapter au Spinner et c'est tout
                    spinnerChantier.setAdapter(adapterChantier);
                    spinnerNom.setAdapter(adapterNom);
    
    
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    
    
    
    }


    J'imagine pour ceux qui sont fort en JAVA que mon code vous a sûrement fait rire, mais comme je l'ai dit je débute en JAVA et POO :)

    Bref le problème : Quand je lance l'application elle crash au moment du CreateSpinner(); alors qu'elle marche parfaitement quand je mets la méthode directement dans le main à l'arrache.

    Merci à vous j’espère que vous pouvez me sauver la vie ! 

    -
    Edité par Yuply 19 avril 2017 à 14:21:36

    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2017 à 14:30:01

      Salut,

      Peux tu afficher le message d'erreur lors du crash stp.

      Merci

      • Partager sur Facebook
      • Partager sur Twitter

      Licence Pro Dev Mobile  - Apprenti Manager Systèmes Informatiques et Robotiques, IMERIR Perpignan

        19 avril 2017 à 15:05:35

        Salut B0uillon, merci pour ta réponse rapide.

        Voilà l'erreur : Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2017 à 17:00:15

          Je ne suis pas sur j'ai pas testé mais essaye de construire ta classe en dehors du onCreate()

          //Si non fonctionnel
          SpinnersAdd spinner = new SpinnersAdd();
          //Essayer juste ça
          SpinnerAdd spinner;



          protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);
           
           
                  if (android.os.Build.VERSION.SDK_INT > 9) {
                      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                      StrictMode.setThreadPolicy(policy);
                  }
           
                  spinner.CreateSpinner();
          }



          -
          Edité par b0uill0n66 19 avril 2017 à 17:01:18

          • Partager sur Facebook
          • Partager sur Twitter

          Licence Pro Dev Mobile  - Apprenti Manager Systèmes Informatiques et Robotiques, IMERIR Perpignan

            25 avril 2017 à 9:46:26

            Up

            Désolé pour le temps de réponse, j'ai eu des petits problèmes familiaux... 

            Du coup j'ai essayé ce que tu m'as dit @b0uill0n66 mais ça ne marche toujours pas :(

            Merci de ton aide, la biz :)

            • Partager sur Facebook
            • Partager sur Twitter
              25 avril 2017 à 10:16:13

              Mais à la fin de la méthode onCreate, tu vas perdre ton objet Spinner, je ne sais pas si c'est l'effet voulu xD
              • Partager sur Facebook
              • Partager sur Twitter
                25 avril 2017 à 10:51:24

                Et en dehors du onCreate() Tu as quoi comme code ?

                Car l'erreur est assez explicite (System services not aviable before onCreate) Tu fais des appels systèmes en dehors du onCreate ?

                • Partager sur Facebook
                • Partager sur Twitter

                Licence Pro Dev Mobile  - Apprenti Manager Systèmes Informatiques et Robotiques, IMERIR Perpignan

                  25 avril 2017 à 11:44:07

                  Enfaite j'ai l'impression que c'est parce que j'utilise des composant graphique dedans, voilà le code : 

                  En dehors du OnCreate() :

                  J'ai que des méthodes (mais aucun problèmes avec) :

                  public void addListenerOnButtonArrived() {....}
                  public void addListenerOnButtondDepart() {....}
                  public void addListenerOnChkbox() {....}
                  public void ShowUser() {....}
                  public void addListenerOnButtonValidartion() {....}

                  Voilà le contenu de mon OnCreate() au kasou :

                          if (android.os.Build.VERSION.SDK_INT > 9) {
                              StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                              StrictMode.setThreadPolicy(policy);
                          }
                  
                        //  spinner.CreateSpinner();
                  
                          // ____________________WORKED____________________________________________________
                              //Chantiers chantiers = new Chantiers("Nom test", "Adresse test");
                  
                              // System.out.println("___________________________________________");
                              //System.out.println(chantiers.Nom + "  " + chantiers.Adresse);
                              //System.out.println("___________________________________________");
                          // ______________________________________________________________________________
                  
                  
                  
                  
                          // Méthode button Arrived
                  
                          // Utilisation des méthodes
                  
                          // Listerner buttons et checkbox /
                          addListenerOnButtonArrived();
                          addListenerOnButtonDepart();
                          addListenerOnChkbox();
                          addListenerOnButtonValidation();
                  
                  
                  
                          ArrayList<String> listChantier = new ArrayList<String>();
                          ArrayList<String> listNoms = new ArrayList<String>();
                  
                  
                  
                  
                  
                  
                  
                          try {
                  
                  
                  
                              // Connexion à l'URL CHANTIER
                              System.out.println("Connexion URL Chantier.txt");
                              URL urlChantier = new URL("https://fossa.emodus.fr/emodusdev/chantiers.txt");
                              URLConnection ycChantier = urlChantier.openConnection();
                  
                              // Connexion à l'URL nom
                              System.out.println("Connexion URL Chantier.txt");
                              URL urlNom = new URL("https://fossa.emodus.fr/emodusdev/users.txt");
                              URLConnection ycNom = urlNom.openConnection();
                  
                  
                              // Récupération des données CHANTIERS
                              BufferedReader inChantiers = new BufferedReader(new InputStreamReader(
                                      ycChantier.getInputStream()));
                  
                              // Récupération des données NOMS
                              BufferedReader inNoms = new BufferedReader(new InputStreamReader(
                                      ycNom.getInputStream()));
                  
                  
                  
                              // Création de la variable qui va stocker les lignes 1par1
                              String inputLine;
                  
                              // Enregistrement dans la liste des CHANTIERS
                              while ((inputLine = inChantiers.readLine()) != null)
                                //  System.out.println(inputLine);
                                  listChantier.add(inputLine);
                              inChantiers.close();
                  
                  
                              // Enregistrement dans la liste des NOMS
                              while ((inputLine = inNoms.readLine()) != null)
                                  //  System.out.println(inputLine);
                                  listNoms.add(inputLine);
                              inNoms.close();
                  
                  
                  
                              // Adapter pour mettre dans le spinner (CHANTIER)
                              ArrayAdapter<String> adapterChantier = new ArrayAdapter<>(
                                      this,
                                      android.R.layout.simple_spinner_item,
                                      listChantier
                              );
                  
                              // Adapter pour mettre dans le spinner (NOMS)
                              ArrayAdapter<String> adapterNom = new ArrayAdapter<>(
                                      this,
                                      android.R.layout.simple_spinner_item,
                                      listNoms
                              );
                  
                              // On definit une présentation du spinner quand il est déroulé (android.R.layout.simple_spinner_dropdown_item)
                              adapterChantier.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                              adapterNom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                  
                              // On trouve le spinner à associer par ID
                              spinnerChantier = (Spinner) findViewById(R.id.spinnerChantier);
                              spinnerNom = (Spinner) findViewById(R.id.spinnerNom);
                  
                              //Enfin on passe l'adapter au Spinner et c'est tout
                              spinnerChantier.setAdapter(adapterChantier);
                              spinnerNom.setAdapter(adapterNom);
                  
                              showUserAndChantier();
                  
                  
                          } catch (MalformedURLException e) {
                              e.printStackTrace();
                          } catch (IOException e) {
                              e.printStackTrace();
                          }



                  Merci d'être les seuls à m'aider :p

                  @Tonio C'est pas l'effet voulu mais en tout cas il reste :) Enfaite j'ajoute juste les valeurs dans le create 

                  -
                  Edité par Yuply 25 avril 2017 à 11:49:04

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Utiliser une méthode dans une autre classe (void)

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown