IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Reload une activité


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Reload une activité
    Bonsoir ,
    J'ai un problème que j'ai du mal a comprendre je vous explique.

    j'ai en ce moment un serveur qui me renvoie un flux JSON, jusque la tout se passe bien il m'envoie mon flux JSON je le parse et je l'affiche mais j'aimerais aussi , dans mon programme, que toute les 12 minutes si je change une valeurs dans ma base de donnée qu'il me ré-affiche la valeurs en question ce qu'il ne fais pas.

    Enfaîte j'ai l'impression qu'il interroge mon serveur une fois et puis il ne le fais plus .

    Je utilise timerTask et timerShedule mais je pense que je n'ai pas trop bien compris le comment sa fonctionne je vous montre mon programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
            public class recuperationJson extends AppCompatActivity implements getData.ReturnValue {
        private getData data;
        private TextView t;
        private String json_string;
        private String json_url = "http://192.168.0.14/projet/php/fichier.php";
     
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            data = new getData(json_url);
            data.setReturnListener(this);
            data.execute((Void) null);
            Timer timer = new Timer();
     
     
            timer.scheduleAtFixedRate(new Testing(), 0,5000);
        }
     
        @Override
        public String renvoyerValeurString(String valeurARenvoyer) {
            data = null;
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            Intent intent = new Intent(this,Accueil.class);
            intent.putExtra("json_data", json_string);
            startActivity(intent);
            Toast.makeText(recuperationJson.this, "test", Toast.LENGTH_SHORT).show();
          // Toast.makeText(this, json_string, Toast.LENGTH_SHORT).show();
     
            return json_string;
        }
     
        public class Testing extends TimerTask {
            @Override
            public void run() {
                recuperationJson.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
     
                       Intent intent1 = getIntent();
                        finish();
                        startActivity(intent1);
     
     
                    }
                });
     
     
    }}}
    j'ai essayer de reload mon activité grâce a l'intent mais il ne fonctionne pas merci de vos réponses

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Pourquoi vouloir recharger l'activité complète alors qu'il suffit de recharger les données ?

    Tu créer une asynctask qui va chercher tes données et les affiches.

    Puis via ta timerTask tu relance cette asynctask à intervalles réguliers. Pas besoin de relancer toute l'activité.

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    final Handler handler = new Handler(); // Handler car une asynctask ne peut pas êtr eappelé par un autre thread que l'ui
    Timer timer = new Timer();
    TimerTask MyTimerTask = new TimerTask() {       
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {       
                    new MyAsyncTask().execute(); // C'est cette asynctask qui gère toute la récup des données et l'affichage
                }
            });
        }
    };
    timer.schedule(MyTimerTask, 0, 720000);
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut RE
    Merci pour ta réponse,
    Mais j'ai essayer de rappeler l'Asyntask en question qui va obtenir mes valeurs mais mon programme plan

    Enfaîte je peux pas créer une Asyntack qui va afficher le résultat dans mon application car après que j'ai appeler mon asyntask qui s’appelle getdata je vais démarrer sur une autre activité qui est Accueil et qui lui va m'afficher les différents partie de mon JSON que j'ai besoins je te montre mes 3 classes .

    recuperationjson.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
         public class recuperationJson extends AppCompatActivity implements getData.ReturnValue {
        private getData data;
        private TextView t;
        private String json_string;
        private String json_url = "http://192.168.0.16/projet/php/fichier.php";
        final Handler handler = new Handler(); // Handler car une asynctask ne peut pas êtr eappelé par un autre thread que l'ui
        Timer timer = new Timer();
     
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            data = new getData(json_url);
            data.setReturnListener(this);
            data.execute((Void) null);
     
     
            timer.schedule(MyTimerTask, 0, 5000/*720000/*/);
        }
     
        @Override
        public String renvoyerValeurString(String valeurARenvoyer) {
            data = null;
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            json_string = valeurARenvoyer;
            Intent intent = new Intent(this,Accueil.class);
            intent.putExtra("json_data", json_string);
            startActivity(intent);
            Toast.makeText(recuperationJson.this, "test", Toast.LENGTH_SHORT).show();
          // Toast.makeText(this, json_string, Toast.LENGTH_SHORT).show();
     
            return json_string;
        }
     
       TimerTask MyTimerTask = new TimerTask() {
           @Override
           public void run() {
               handler.post(new Runnable() {
                   public void run() {
     
     
                     // C'est cette asynctask qui gère toute la récup des données et l'affichage
                       data.execute();
                   }
               });
           }
       };
     
     
     
     
    }
    getdata.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    public class getData extends AsyncTask<Void, Void, String> {
        private String json_url;
        private ReturnValue returnValueImpl;
        private String jsonParser2;// variable json a retourner a la vu
     
        public getData(String json_url) {
     
            this.json_url = json_url;
     
        }
     
        @Override
        protected String doInBackground(Void... params) //obtient le flux json
        {
     
     
            try {
                URL url = new URL(json_url); // connexion
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// connexion
                InputStream inputStream = httpURLConnection.getInputStream(); //lecture
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//lecture
                StringBuilder stringBuilder = new StringBuilder();//lecture
                while ((jsonParser2 = bufferedReader.readLine()) != null) {//lecture
                    stringBuilder.append(jsonParser2 + "\n");//lecture
                }
     
                bufferedReader.close(); //stop
                inputStream.close(); //stop
     
                httpURLConnection.disconnect();//déconecter
                return stringBuilder.toString().trim(); //valeur du json
     
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return jsonParser2;
        }
     
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
     
        @Override
        protected void onPostExecute(String result)//Donne le résultat
        {
     
            returnValueImpl.renvoyerValeurString(result);
     
     
        }
     
        public void setReturnListener(ReturnValue returnListener) {
            this.returnValueImpl = returnListener;
        }
     
        public interface ReturnValue {
            abstract String renvoyerValeurString(String valeurARenvoyer);
        }
     
     
    }
    Accueil.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    public class Accueil extends AppCompatActivity {
        private String json_string;
        private JSONObject jObj = null;
        private TextView Mpx,Al,Ar,Rds,Pilots,Frequence,Rf;
            private int mpxInt,arInt,alInt,rdsInt,pilotsInt,frequenceInt,rfInt;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_accueil);
            json_string = getIntent().getExtras().getString("json_data");
     
            Mpx = (TextView) findViewById(R.id.mpx);
            Ar=(TextView)findViewById(R.id.ar);
            Al=(TextView)findViewById(R.id.al);
            Rds=(TextView)findViewById(R.id.rds);
            Pilots=(TextView)findViewById(R.id.pilots);
            Frequence=(TextView)findViewById(R.id.frequence);
            Rf=(TextView)findViewById(R.id.rf);
     
                    try {
                        // Json Object {}
                        /******************************************************************************/
                        //Insere les valeurs du json dans la classe valeur qui contient les get et set
                        String mpx, rds, al, ar, frequence, pilots, id, id_SIGFOX, timestamps, rf;
                        jObj = new JSONObject(json_string);
                        mpx = jObj.getString("MPX");//se place a l'endroit MPX du json et obtient le string apres les :
                        rds = jObj.getString("RDS");
                        rf = jObj.getString("RF");
                        frequence = jObj.getString("Frequence");
                        timestamps = jObj.getString("timestamp");
                        id = jObj.getString("id");
                        id_SIGFOX = jObj.getString("id_SIGFOX");
                        pilots = jObj.getString("PILOT");
                        al = jObj.getString("a_l");
                        ar = jObj.getString("a_r");
                        Valeur valeurs = new Valeur
                                (mpx, rds, al, ar, pilots, frequence, id, timestamps, id_SIGFOX, rf);
                        /******************************************************************************/
                        mpxInt = Integer.parseInt(valeurs.getMpx());
                        arInt=Integer.parseInt(valeurs.getAr());
                        alInt=Integer.parseInt(valeurs.getAl());
                        rdsInt=Integer.parseInt(valeurs.getRds());
                        rfInt=Integer.parseInt(valeurs.getRf());
                        frequenceInt=Integer.parseInt(valeurs.getFrequence());
                        pilotsInt=Integer.parseInt(valeurs.getPilots());
     
                        if(mpxInt<=1 || mpxInt>8) {
                        Mpx.setText(valeurs.getMpx());
                            Mpx.setText(valeurs.getMpx());
     
                        }else {
                            Mpx.setText(valeurs.getMpx());
                            Mpx.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                        if(arInt<5||arInt>50){
                        Ar.setText(valeurs.getAr());}
                        else {
                            Ar.setText(valeurs.getAr());
                            Ar.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                        if(alInt<5||alInt>50){
                            Al.setText(valeurs.getAl());}
                        else {
                            Al.setText(valeurs.getAl());
                            Al.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                        if(rfInt<5||rfInt>50){
                            Rf.setText(valeurs.getRf());}
                        else {
                            Rf.setText(valeurs.getRf());
                            Rf.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                        if(rdsInt<-40||rdsInt>50){
                            Rds.setText(valeurs.getRds());}
                        else {
                            Rds.setText(valeurs.getRds());
                            Rds.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                        if(pilotsInt<5||pilotsInt>50){
                            Pilots.setText(valeurs.getPilots());}
                        else {
                            Pilots.setText(valeurs.getPilots());
                            Pilots.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                        if(frequenceInt<5||frequenceInt>1035){
                            Frequence.setText(valeurs.getFrequence());}
                        else {
                            Frequence.setText(valeurs.getFrequence());
                            Frequence.setTextColor(Color.parseColor("#DF0101"));//red
                        }
     
                    } catch (JSONException e) {
     
                        e.printStackTrace();
                    }
                }
    log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: com.suprem.projetfinal, PID: 14680
                      java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.AsyncTask com.suprem.projetfinal.getData.execute(java.lang.Object[])' on a null object reference
                          at com.suprem.projetfinal.recuperationJson$1$1.run(recuperationJson.java:61)
                          at android.os.Handler.handleCallback(Handler.java:739)
                          at android.os.Handler.dispatchMessage(Handler.java:95)
                          at android.os.Looper.loop(Looper.java:135)
                          at android.app.ActivityThread.main(ActivityThread.java:5254)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at java.lang.reflect.Method.invoke(Method.java:372)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    qui me dit lui que il n'a pas instancier d'objet

    j'ai une autre classe qui s'apelle valeurs qui contient les get et les set

    Donc c'est pour sa que je voulais redémarrer l'activité pour qu'il puisse après faire démarrer l'Intent de Accueil et les ré afficher donc comment dois toujours faire démarrer juste getdata? ou tout redémarrer?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Ton workflow n'est pas bon.

    Si c'est accueil qui à besoin d'afficher/utiliser les données de l'asynctask c'est accueil qui doit la lancer et pas une autre activité.
    De plus ,à mon avis, tu créer une memory leak puisque tant que ton asynctask n'est pas fini l'activity l'ayant appeler ne peut pas être nettoyer par le GC.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Ben enfaîte dans ce code la classe récupérationJson récupère juste le json que mon serveur envoie et le donne a la classe Accueil c'est une sorte de passerelle si je met tout dans le meme fichier java le code serais moins clairs donc j'ai séparé les parties :

    -Une classe qui est la obtient le flux json et la diffuse au autres classes qui en ont besoins (recuperationJson)
    -Une classe qui affiche le flux json et le parse (accueil)
    -Une classe qui interroge le serveur et renvoie son flux JSON (getData)

    Donc d’après se que j'ai compris j'ai intérêt a fusionner ma classe recuperationJson et ma classe Accueil? pour pouvoir utiliser par la suite timerTask?

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Séparer les fonctionnalités en classe pour maximiser la réutilisation c'est très bien.
    Sauf que ta classe qui récupère le JSON n'a pas besoin d'être une activité.

    Une activité c'est un écran à afficher.

    Pour aller au plus simple je ferais ca quelque chose comme ca :
    Récupération des données et parsage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class RecuperationJson 
    {
    	public MonJsonParse getDatas()
    	{
    		return parseJson(getJson());
    	}
    	private String getJson();
    	private MonJsonParse parseJson(String data);
    }
    Puis pour chaque activité ayant besoin de l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class UneActivite extends AppCompatActivity
    {
     
    	void foo()
    	{
    		new DataGetter.execute();
    	}
     
    	private class DataGetter extends AsyncTask<Void, Void, MonJsonParse>
    	{
     
    		@Override
    		protected MonJsonParse doInBackground(Void... arg0) {
     
    			RecuperationJson rj = new RecuperationJson();
    			return rj.getDatas();
    		}
     
    		@Override
    		protected void onPostExecute(MonJsonParse result) {
    			//utiliser l'objet MonJsonParse pour modifier l'ui de l'activité
    		}
    	}
    }
    La classe RecuperationJson pourrait aussi avoir un Thread et être appelé depuis un service (c'est probablement le mieux d'un point vue organisation du code). Ce service serait ensuite utilisé par toutes les activités qui en ont besoin.
    C'est juste un peu plus complexe
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    J'ai tout mis dans le même fichier java en supprimant une classe (la classe Accueil) plutôt ce qui ressemble a ça (les autres classe reste inchangée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    public class recuperationJson extends AppCompatActivity implements getData.ReturnValue {
        private getData data;
        private JSONObject jObj = null;
        private String json_string;
        private String json_url = "http://192.168.0.17/projet/php/fichier.php";
        final Handler handler = new Handler(); // Handler car une asynctask ne peut pas êtr eappelé par un autre thread que l'ui
        Timer timer = new Timer();
        private TextView Mpx,Al,Ar,Rds,Pilots,Frequence,Rf;
        private int mpxInt,arInt,alInt,rdsInt,pilotsInt,frequenceInt,rfInt;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            data = new getData(json_url);
            data.setReturnListener(this);
            data.execute((Void) null);
     
            Mpx = (TextView) findViewById(R.id.mpx);
            Ar = (TextView) findViewById(R.id.ar);
            Al = (TextView) findViewById(R.id.al);
            Rds = (TextView) findViewById(R.id.rds);
            Pilots = (TextView) findViewById(R.id.pilots);
            Frequence = (TextView) findViewById(R.id.frequence);
            Rf = (TextView) findViewById(R.id.rf);
     
        }
     
        @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            data=null;
     
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            try {
                // Json Object {}
                /******************************************************************************/
                //Insere les valeurs du json dans la classe valeur qui contient les get et set
                String mpx, rds, al, ar, frequence, pilots, id, id_SIGFOX, timestamps, rf;
                jObj = new JSONObject(valeurARenvoyer);
                mpx = jObj.getString("MPX");//se place a l'endroit MPX du json et obtient le string apres les :
                rds = jObj.getString("RDS");
                rf = jObj.getString("RF");
                frequence = jObj.getString("Frequence");
                timestamps = jObj.getString("timestamp");
                id = jObj.getString("id");
                id_SIGFOX = jObj.getString("id_SIGFOX");
                pilots = jObj.getString("PILOT");
                al = jObj.getString("a_l");
                ar = jObj.getString("a_r");
                Valeur valeurs = new Valeur
                        (mpx, rds, al, ar, pilots, frequence, id, timestamps, id_SIGFOX, rf);
                mpxInt = Integer.parseInt(valeurs.getMpx());
                arInt=Integer.parseInt(valeurs.getAr());
                alInt=Integer.parseInt(valeurs.getAl());
                rdsInt=Integer.parseInt(valeurs.getRds());
                rfInt=Integer.parseInt(valeurs.getRf());
                frequenceInt=Integer.parseInt(valeurs.getFrequence());
                pilotsInt=Integer.parseInt(valeurs.getPilots());
     
                if(mpxInt<=1 || mpxInt>8) {
                    Mpx.setText(valeurs.getMpx());
                    Mpx.setText(valeurs.getMpx());
     
                }else {
                    Mpx.setText(valeurs.getMpx());
                    Mpx.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
                if(arInt<5||arInt>50){
                    Ar.setText(valeurs.getAr());}
                else {
                    Ar.setText(valeurs.getAr());
                    Ar.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
                if(alInt<5||alInt>50){
                    Al.setText(valeurs.getAl());}
                else {
                    Al.setText(valeurs.getAl());
                    Al.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
                if(rfInt<5||rfInt>50){
                    Rf.setText(valeurs.getRf());}
                else {
                    Rf.setText(valeurs.getRf());
                    Rf.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
                if(rdsInt<-40||rdsInt>50){
                    Rds.setText(valeurs.getRds());}
                else {
                    Rds.setText(valeurs.getRds());
                    Rds.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
                if(pilotsInt<5||pilotsInt>50){
                    Pilots.setText(valeurs.getPilots());}
                else {
                    Pilots.setText(valeurs.getPilots());
                    Pilots.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
                if(frequenceInt<5||frequenceInt>1035){
                    Frequence.setText(valeurs.getFrequence());}
                else {
                    Frequence.setText(valeurs.getFrequence());
                    Frequence.setTextColor(Color.parseColor("#DF0101"));//red
                }
     
            } catch (JSONException e) {
     
                e.printStackTrace();
            }
     
        }
     
    }
    Donc en gros il me reste 3 classes:
    -recuperatioJson (Affiche le texte et utilise le json)
    -getData(obtient le json )
    -valeur (contient les get et les set des valeurs du json)

    Dans mon ancien programme c'étais avec 4 classes:
    -recuperatioJson (prend le json de la classe getData et le redistribue a la classe accueil)
    -getData(obtient le json )
    -valeur (contient les get et les set des valeurs du json)
    -accueil(affiche le texte et utilise le json

    Pense tu que maintenant ceci est plus optimiser? avec 3 classes que 4 dans ce contexte car comme maintenant j'ai fusionner ma classe accueil et ma classe recuperationJson je peux utiliser TimerTask pour enfin permettre a mon application d'interroger mon serveur toutes les 12 minutes

  8. #8
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Janvier 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 30
    Points : 13
    Points
    13
    Par défaut Re
    j'ai trouvé la solution je la partage pour ceux a qui sa pourrais intéresser si ils ont le même problème (effectivement il faut mettre le timerTask dans le thread sinon il plante)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    public class recuperationJson extends AppCompatActivity implements getData.ReturnValue {
        private getData data;
        private JSONObject jObj = null;
        private String json_string;
        private String json_url = "http://192.168.0.16/projet/php/fichier.php";
        final Handler handler = new Handler(); // Handler car une asynctask ne peut pas êtr eappelé par un autre thread que l'ui
        Timer timer = new Timer();
        private TextView Mpx, Al, Ar, Rds, Pilots, Frequence, Rf;
        private int mpxInt, arInt, alInt, rdsInt, pilotsInt, frequenceInt, rfInt;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            data = new getData(json_url);
            data.setReturnListener(this);
            data.execute((Void) null);
            timer.schedule(MyTimerTask, 2000, 5000/*720000/*/);
            Mpx = (TextView) findViewById(R.id.mpx);
            Ar = (TextView) findViewById(R.id.ar);
            Al = (TextView) findViewById(R.id.al);
            Rds = (TextView) findViewById(R.id.rds);
            Pilots = (TextView) findViewById(R.id.pilots);
            Frequence = (TextView) findViewById(R.id.frequence);
            Rf = (TextView) findViewById(R.id.rf);
    
        }
    
        @Override
        public void renvoyerValeurString(String valeurARenvoyer) {
            data = null;
    
            //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer
            try {
                // Json Object {}
                /******************************************************************************/
                //Insere les valeurs du json dans la classe valeur qui contient les get et set
                String mpx, rds, al, ar, frequence, pilots, id, id_SIGFOX, timestamps, rf;
                jObj = new JSONObject(valeurARenvoyer);
                mpx = jObj.getString("MPX");//se place a l'endroit MPX du json et obtient le string apres les :
                rds = jObj.getString("RDS");
                rf = jObj.getString("RF");
                frequence = jObj.getString("Frequence");
                timestamps = jObj.getString("timestamp");
                id = jObj.getString("id");
                id_SIGFOX = jObj.getString("id_SIGFOX");
                pilots = jObj.getString("PILOT");
                al = jObj.getString("a_l");
                ar = jObj.getString("a_r");
                Valeur valeurs = new Valeur
                        (mpx, rds, al, ar, pilots, frequence, id, timestamps, id_SIGFOX, rf);
                mpxInt = Integer.parseInt(valeurs.getMpx());
                arInt = Integer.parseInt(valeurs.getAr());
                alInt = Integer.parseInt(valeurs.getAl());
                rdsInt = Integer.parseInt(valeurs.getRds());
                rfInt = Integer.parseInt(valeurs.getRf());
                frequenceInt = Integer.parseInt(valeurs.getFrequence());
                pilotsInt = Integer.parseInt(valeurs.getPilots());
    
                if (mpxInt <= 1 || mpxInt > 8) {
                    Mpx.setText(valeurs.getMpx());
                    Mpx.setText(valeurs.getMpx());
    
                } else {
                    Mpx.setText(valeurs.getMpx());
                    Mpx.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
                if (arInt < 5 || arInt > 50) {
                    Ar.setText(valeurs.getAr());
                } else {
                    Ar.setText(valeurs.getAr());
                    Ar.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
                if (alInt < 5 || alInt > 50) {
                    Al.setText(valeurs.getAl());
                } else {
                    Al.setText(valeurs.getAl());
                    Al.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
                if (rfInt < 5 || rfInt > 50) {
                    Rf.setText(valeurs.getRf());
                } else {
                    Rf.setText(valeurs.getRf());
                    Rf.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
                if (rdsInt < -40 || rdsInt > 50) {
                    Rds.setText(valeurs.getRds());
                } else {
                    Rds.setText(valeurs.getRds());
                    Rds.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
                if (pilotsInt < 5 || pilotsInt > 50) {
                    Pilots.setText(valeurs.getPilots());
                } else {
                    Pilots.setText(valeurs.getPilots());
                    Pilots.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
                if (frequenceInt < 5 || frequenceInt > 1035) {
                    Frequence.setText(valeurs.getFrequence());
                } else {
                    Frequence.setText(valeurs.getFrequence());
                    Frequence.setTextColor(Color.parseColor("#DF0101"));//red
                }
    
            } catch (JSONException e) {
    
                e.printStackTrace();
            }
        }
    
        TimerTask MyTimerTask = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        data = new getData(json_url);
                        data.setReturnListener(recuperationJson.this);
    
                        // C'est cette asynctask qui gère toute la récup des données et l'affichage
                       
                        data.execute((Void) null);
                    }
                });
            }
    
    
        };
    }
    Merci pour l'aide sa m'a aider en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/05/2008, 19h41
  2. [MCD]gamme opératoire d'une activité
    Par Mike888 dans le forum Schéma
    Réponses: 15
    Dernier message: 20/11/2007, 09h58
  3. [DOM] Barre d'activité témoignant d'une activité incessante
    Par *s0ma* dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/07/2007, 21h43
  4. Simuler une activité pour empêcher une déconnection
    Par docjfnoel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/05/2007, 10h05
  5. Réponses: 2
    Dernier message: 29/04/2007, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo