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 :

Passer des données entre Activity


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Passer des données entre Activity
    Bonjour à tous,


    Développeur android depuis peu (48h environ ;p) et étant un débutant en java ( je préfère le C), je dois réaliser une application assez complexe de controle de robot par wifi.

    J'ai pour l'instant réaliser 3 écran (connexion, configuration et chargement), je ne traite pas encore les sockets ni les threads de connexion j'essaye juste de transférer la valeur contenu dans mes edittexte (ip+port) de mon activity configuration à mon activity chargement.

    Voici une pseudo machine à état :







    J'ouvre mon appli l'ecran associé a l'activité connexion s'ouvre et 2 boutons (connexion et configuration) apparaissent.

    (Activity connexion)



    Le bouton connexion servira à crée la socket il récupéra les valeur contenue dans l'Activity configuration (via l'activity connexion ?).

    Le bouton configuration sert a ouvrir l'activity configration pour régler le port et l'ip a laquelle se connecté.


    Après clique sur le bouton configuration l’écran suivant apparaît :

    (Activity configuration)




    Au lancement de l'application j'aimerais que les champs Edit texte (Activity configuration) apparaissent avec les valeurs rentrées et valider lors d'une utilisation ultérieur (état de mémoire).

    2 champ de texte de type editTexte pour configurer l'ip et le port de connexion.

    Un appui sur retour ne prendra en compte aucune des modifications faite lors du déroulement de l'activity configuration.

    un appui sur valider enregistrera la variable stringIp et stringPort pour la transmettre.


    Voilà c'est bien beau mais du code c'est mieux ;p

    Mon activity connexion :

    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
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.*;
    import android.widget.Button;
    import android.content.Intent;
     
    public class Connexion extends Activity {
     
    	private Button b_connection;
    	private Button b_configuration;
     
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.interface_connexion);
    		//On recupère l'id
    		b_connection = (Button) findViewById(R.id.B_connexion);
    		b_configuration = (Button) findViewById(R.id.B_configuration);
    		//On affecte un event.
     
    		 b_connection.setOnClickListener(new View.OnClickListener(){
    			@Override
    			public void onClick(View v){
     
    				Intent chargement = new Intent(getApplicationContext(),Chargement.class);
    				startActivity(chargement);
    			}
    		});
     
     
    		b_configuration.setOnClickListener(new View.OnClickListener(){
    		@Override
    		public void onClick(View v){
     
    			Intent configuration = new Intent(getApplicationContext(),Configuration.class);
    			startActivity(configuration);
    		}
    	});
    }
     
    }
    Sa marche niquel avec les 2 boutons mais aucune des fonctionalité n'a été implanté.


    Configuration :

    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
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
     
    public class Configuration extends Activity {
     
    	private Button b_valid;
    	private Button b_return;
     
    	EditText my_ip = (EditText) findViewById(R.id.E_ip);
    	EditText my_port = (EditText) findViewById(R.id.E_port);
     
    	String ip = my_ip.getText().toString();
    	String port = my_port.getText().toString();
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.interface_configuration);
     
     
     
    	b_valid.setOnClickListener(new View.OnClickListener(){
    	@Override
    	public void onClick(View v){
     
    		Intent configuration = new Intent(getApplicationContext(),Configuration.class);
    		configuration.putExtra("ip",ip);
    		configuration.putExtra("port",port);
    		startActivity(configuration);
    		}
    	});
     
    	}
    }
    Donc d'apres ce que j'ai lu le passage de données entre activity se fait a l'aide de bundle ou de put.extra a ce que j'ai pu lire avec la le nom de code en 1er paramètre et avec la variable en second.

    J'essaye donc d'enregistrer la valeur mise dans les champs EditTexte.


    Chargement :

    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
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
     
    public class Chargement extends Activity {
     
    	String ip;
    	String port;
     
    	Intent intent = getIntent();
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.interface_chargement);
     
    		String ip = intent.getStringExtra("ip");
    		String port = intent.getStringExtra("port");
     
     
     
    	}
    }

    J'essaye de récupérer les valeurs des EditTexte de l'activity configuration.
    Je ne prend pas encore en compte l’état de mémoire.
    Je ne prend pas encore en compte la différence entre valider et retour.
    Le bouton retour ne fait rien.

    En gros j'arrive pas a faire transiter des valeurs entre les activity ^^".
    Merci d'avance.

    PS mon log :
    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
     
    04-17 20:38:24.030: D/dalvikvm(378): GC_FOR_ALLOC freed 38K, 4% free 6348K/6595K, paused 56ms
    04-17 20:38:24.121: I/dalvikvm-heap(378): Grow heap (frag case) to 13.535MB for 7579456-byte allocation
    04-17 20:38:24.200: D/dalvikvm(378): GC_FOR_ALLOC freed <1K, 2% free 13749K/14023K, paused 50ms
    04-17 20:38:24.311: D/dalvikvm(378): GC_CONCURRENT freed <1K, 2% free 13749K/14023K, paused 6ms+2ms
    04-17 20:38:24.410: D/dalvikvm(378): GC_FOR_ALLOC freed 7402K, 52% free 7173K/14855K, paused 53ms
    04-17 20:38:24.420: I/dalvikvm-heap(378): Grow heap (frag case) to 13.526MB for 6724816-byte allocation
    04-17 20:38:24.560: D/dalvikvm(378): GC_FOR_ALLOC freed <1K, 8% free 13740K/14855K, paused 52ms
    04-17 20:38:24.690: D/dalvikvm(378): GC_CONCURRENT freed <1K, 8% free 13740K/14855K, paused 4ms+16ms
    04-17 20:38:25.290: D/dalvikvm(378): GC_FOR_ALLOC freed 6567K, 47% free 7903K/14855K, paused 51ms
    04-17 20:38:25.400: I/dalvikvm-heap(378): Grow heap (frag case) to 19.036MB for 11754152-byte allocation
    04-17 20:38:25.540: D/dalvikvm(378): GC_FOR_ALLOC freed <1K, 27% free 19382K/26375K, paused 50ms
    04-17 20:38:25.662: D/dalvikvm(378): GC_CONCURRENT freed <1K, 27% free 19382K/26375K, paused 4ms+16ms
    04-17 20:38:27.240: V/TLINE(378): new: android.text.TextLine@4063dc50
    04-17 20:38:27.720: V/TLINE(378): new: android.text.TextLine@40d84140
    04-17 20:38:50.790: D/AndroidRuntime(378): Shutting down VM
    04-17 20:38:50.790: W/dalvikvm(378): threadid=1: thread exiting with uncaught exception (group=0x40014760)
    04-17 20:38:50.854: E/AndroidRuntime(378): FATAL EXCEPTION: main
    04-17 20:38:50.854: E/AndroidRuntime(378): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test/com.example.test.Configuration}: java.lang.NullPointerException
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1672)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.ActivityThread.access$1500(ActivityThread.java:122)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.os.Looper.loop(Looper.java:132)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.ActivityThread.main(ActivityThread.java:4025)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at java.lang.reflect.Method.invokeNative(Native Method)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at java.lang.reflect.Method.invoke(Method.java:491)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at dalvik.system.NativeStart.main(Native Method)
    04-17 20:38:50.854: E/AndroidRuntime(378): Caused by: java.lang.NullPointerException
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.Activity.findViewById(Activity.java:1744)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at com.example.deporteo.Configuration.<init>(Configuration.java:23)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at java.lang.Class.newInstanceImpl(Native Method)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at java.lang.Class.newInstance(Class.java:1301)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1663)
    04-17 20:38:50.854: E/AndroidRuntime(378): 	... 11 more
    04-17 20:38:54.490: I/Process(378): Sending signal. PID: 378 SIG: 9

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Comme indiqué dans l'exception:
    Caused by: java.lang.NullPointerException
    at android.app.Activity.findViewById(Activity.java:1744)
    at com.example.deporteo.Configuration.<init>(Configuration.java:23)
    On a un problème pendant la phase d'initialisation (<init>) de l'objet Configuration (fichier Configuration.java, ligne 23)

    Et en effet ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            EditText my_ip = (EditText) findViewById(R.id.E_ip);
    	EditText my_port = (EditText) findViewById(R.id.E_port);
     
    	String ip = my_ip.getText().toString();
    	String port = my_port.getText().toString();
    Ne peut fonctionner... l'objet vient juste d'être créé, il n'a donc pas de "layout" (celui-ci est assigné par l'appel à setContentView() dans la fonction onCreate()). En fait, il n'y a même pas de Window ou de Context ! Du coup findViewById() va crasher avec un NPE.
    Et même si il ne le faisait pas, my_ip va être null (pas de layout) et du coup my_ip.getText() crasherait aussi avec un NullPointerException.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [Débutant] Passer des données entre les fonctions callback
    Par Nouk_Lea dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 18/02/2009, 16h11
  2. Passer des données de tableau entre methodes.
    Par PascalBeaudoin dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/12/2008, 17h52
  3. Réponses: 3
    Dernier message: 26/05/2008, 17h20
  4. Réponses: 15
    Dernier message: 08/04/2007, 01h12
  5. [Données]Passer des données entre applet et Servlet
    Par CheryBen dans le forum Applets
    Réponses: 11
    Dernier message: 16/09/2005, 13h48

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