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 :

Ecran noir " débutant"


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Ecran noir " débutant"
    Bonjour à tous

    Etant plus que débutant dans la programmation , j'essaie d’acquérir des connaissances en faisant quelque petit projet , Mais là , je ne comprend pas le résultat .

    mon .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
     
    package com.example.kyuzo.boucling;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.Button;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    public class MainActivity extends AppCompatActivity {
        int nombre1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            Date d = new Date();
            while (nombre1 == 0)
            {
                TextView t2 = (TextView) findViewById(R.id.textView2);
                Button monBouton = (Button)findViewById(R.id.button1);
                SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
                String s = f.format(d);
                t2.setText(s);
     
                monBouton.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        Toast.makeText(MainActivity.this, "button1 " + nombre1 + " appuyé !", Toast.LENGTH_SHORT).show();
                        nombre1 = 1;
                    }
                });
            }
        }
    }
    mon .xml

    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
     
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
     
        <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView" />
     
        <TextView
            android:id="@+id/textView2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textSize="45sp"
            android:textColor="#143dcc"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
        <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/button1"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentBottom="true"
            android:color="#143dcc"
            android:textColor="#ff1beb"
            android:alpha="0.50"
            android:layout_alignParentTop="true" />
     
    </RelativeLayout>
    mon algo souhaité :

    faire tant que nombre1 = 0
    récupérer les paramètres du layout de button1
    récupérer l'heure au format "HH:mm:ss"
    afficher l'heure danst2 qui récupére l'affichage de textview t2
    quand je clique sur le bouton , nombre1 = 1
    qui a pour effet de sortir de la boucle

    Mon problème est que depuis que je fait passer mon programme dans la boucle while , j'ai un écran complètement blanc , alors qu'avant j'avais bien l'heure qui s'affichais mais en fixe.

    Je vous remercie déjà pour avoir lu jusque ici , puis qui sais , peut etre vous pourriez me venir en aide

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut,

    Ce n'est pas correct de récupérer les composants graphiques à l'intérieur d'une boucle. Tu as ce comportement parce que la variable nombre ne change jamais de valeur et ta boucle tourne infiniment avec en son sein les récupérations des views depuis le XML.

    Voici ton code corrigé :

    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
     
    package com.example.kyuzo.boucling;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.Button;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class MainActivity extends AppCompatActivity {
     
    TextView t2;
    Button monBouton;
    int nombre1;
    Date d;
    SimpleDateFormat f = new SimpleDateFormat( "HH:mm:ss" );
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     
    t2 = (TextView) findViewById(R.id.textView2);
    monBouton = (Button)findViewById(R.id.button1);
     
    monBouton.setOnClickListener( new View.OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
    while (nombre1 == 0 ){ 
    d= new Date();
    String s = f.format(d);
    t2.setText(s); 
    Toast.makeText(MainActivity. this, "button1 " + nombre1 + " appuyé !" , Toast.LENGTH_SHORT).show();
    nombre1 = 1 ;
    }
     
    }
    });
     
    }
    }
    PS: Logiquement je ne vois pas pourquoi utiliser une boucle dans ce cas....

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Salut kyuzo_css et bienvenu,

    Tu vas un peu trop vite. Il te faut acquérir des bases indispensable sur les concepts de la programmation sous android.
    Tout particulièrement sur la notion: de cycle de vie d'une activité.
    En visualisant ton code, je vois que tu restes bloqué dans la boucle, donc dans l'évènement OnCreate(), tant que le bouton n'est pas appuyé, or celui ci ne peut exister qu'une fois sorti de OnCreate().

    Par ailleurs: on ne boucle pas sur des créations d'objets (utilisation de new) qui va créer des objets à l'infini, tant qu'on est dans la boucle, et ainsi saturer la mémoire. (bien qu'il y a des mécanisme de sécurité de libération).
    Un autre principe est la notion de multitache: on ne peut monopoliser le traitement, rester dans une boucle à l'infini ; en théorie une sécurité détruit tout process qui monopolise plus de 20s (si je ne trompe) le système.

    Pour afficher à intervalle régulier l'heure, il faut déclencher des événements à intervalle régulier. Il existe des solutions pour cela, dont la mise en place d'une alarme récurrente (bien que je ne suis pas sur que ce soit le plus simple).

    D'autres pourront surement apporter plus de précision.
    Bonne continuation.

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci à vous deux pour vos réponse

    MasterMbg : Merci pour ton code mais en effet , il n'y a aucun intérêt à faire ce code , mon but était de récupérer l'heure et de l'afficher dans la boucle , puis en sortir en cliquant sur le bouton , et non pas de démarrer la boucle avec le bouton

    Vodiem :

    Tu vas un peu trop vite. Il te faut acquérir des bases indispensable sur les concepts de la programmation sous android.
    Tout particulièrement sur la notion: de cycle de vie d'une activité.
    En effet , j'ai relu un Tutorial concernant les activités , j'avais un peu compris de travers la première fois , j'avais conclu que une class = une activité et non pas des le onCreate , merci a toi pour ça

    Si j'ai bien suivi , mon public void onClick , est une 2 eme activité ???

    Par ailleurs: on ne boucle pas sur des créations d'objets (utilisation de new) qui va créer des objets à l'infini, tant qu'on est dans la boucle, et ainsi saturer la mémoire. (bien qu'il y a des mécanisme de sécurité de libération).
    Un autre principe est la notion de multitache: on ne peut monopoliser le traitement, rester dans une boucle à l'infini ; en théorie une sécurité détruit tout process qui monopolise plus de 20s (si je ne trompe) le système.
    Je ne savais pas non plus

    Pour afficher à intervalle régulier l'heure, il faut déclencher des événements à intervalle régulier. Il existe des solutions pour cela, dont la mise en place d'une alarme récurrente (bien que je ne suis pas sur que ce soit le plus simple).
    Je vais me documenté sur ça , ça à l'air d’être ce que je recherche

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