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 :
http://nsa33.casimages.com/img/2013/...4838501222.png
J'ouvre mon appli l'ecran associé a l'activité connexion s'ouvre et 2 boutons (connexion et configuration) apparaissent.
(Activity connexion)
http://nsa34.casimages.com/img/2013/...5023919561.png
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)
http://nsa33.casimages.com/img/2013/...5023683038.png
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:
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:
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:
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:
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 |