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

Composants graphiques Android Discussion :

Sauvegarder et réutiliser une textview


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut Sauvegarder et réutiliser une textview
    Bonjour

    Voila mon petit problème.
    je souhaiterais récupérer la valeur d'une textview d'un layout depuis une activité et ensuite la mettre dans une variable. Cette variable sera utilisée pour etre insérée dans une textview.
    Ceci me permettrait de mémoriser une valeur d'une textview pour ensuite l'insérer dans dans le cache (enfin ca c'est pas encore fait )

    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
     
    public class main extends Activity {
     
    	TextView h1,h2;
     
     
    		public void onCreate(Bundle savedInstanceState) {
     
    			super.onCreate(savedInstanceState);
    			setContentView(R.layout.result);
     
    				h2=(TextView)findViewById(R.id.text2);
    				h1=(TextView)findViewById(R.id.text1);
     
    			String R=h1.getText().toString();
    			int r=Integer.parseInt(R);
     
    			 h2.setText(""+r+"");
     
    			}
    }
    1 - Je n'arrive pas à afficher ma variable "h2" dans le layout

    2 - Je ne sais pas comment sauvegarder une variable pour la retrouver après la fermeture du programme (je pense qu'il faut les insérer dans le cache )

  2. #2
    Membre très actif
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur Informatique et Développeur Android

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Par défaut
    Citation Envoyé par Phoenix2025 Voir le message
    Bonjour

    Voila mon petit problème.
    je souhaiterais récupérer la valeur d'une textview d'un layout depuis une activité et ensuite la mettre dans une variable. Cette variable sera utilisée pour etre insérée dans une textview.
    Ceci me permettrait de mémoriser une valeur d'une textview pour ensuite l'insérer dans dans le cache (enfin ca c'est pas encore fait )

    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
     
    public class main extends Activity {
     
    	TextView h1,h2;
     
     
    		public void onCreate(Bundle savedInstanceState) {
     
    			super.onCreate(savedInstanceState);
    			setContentView(R.layout.result);
     
    				h2=(TextView)findViewById(R.id.text2);
    				h1=(TextView)findViewById(R.id.text1);
     
    			String R=h1.getText().toString();
    // pourquoi tu change R vers r integr puisque tu veux l'afficher dans h2 
    			int r=Integer.parseInt(R);
     
    			 h2.setText(""+r+"");
     
    			}
    }
    1 - Je n'arrive pas à afficher ma variable "h2" dans le layout

    2 - Je ne sais pas comment sauvegarder une variable pour la retrouver après la fermeture du programme (je pense qu'il faut les insérer dans le cache )
    le dernier partie devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String R=h1.getText().toString();
     h2.setText(R);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Non sa fonctionne toujours pas.

    Mon problème se situe dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String R=resultmonument1.getText().toString();
    cette ligne me fait planter mon sous-programme

    j'ai tenté de faire une fonction if pour voir si la variable était "null" mais rien.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String R = h1.getText().toString(); // si getText() est null alors toString() fait planter.
    Pas besoin de faire toString(), getText() retournera un String (même si le retour est pas String directement le cast est implicite).

    Sinon peut-être que le result.xml pourrait nous aider.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Citation Envoyé par Aerinder
    Pas besoin de faire toString(), getText() retournera un String (même si le retour est pas String directement le cast est implicite).
    J'ai donc fait ca :
    Mais la ligne devient directement erronée.

    Suivant ton conseil sur le null j'ai donc fait un if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (R==null)
    			{
    				h2.setText("toto");
    			}else{
    			h2.setText(R);
    			}
    mais rien y fait

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Le conseil sur le null avec le toString(), passer null à setText ne fait pas planter.

    Pourriez-vous mettre le Logcat et le xml du layout "result" pour qu'on essaye de résoudre le bug.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    logcat :
    06-03 17:50:56.522: INFO/ActivityManager(58): Starting activity: Intent { cmp=gv.tester/.mainresult }
    06-03 17:50:56.670: DEBUG/AndroidRuntime(759): Shutting down VM
    06-03 17:50:56.670: WARN/dalvikvm(759): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    06-03 17:50:56.681: ERROR/AndroidRuntime(759): Uncaught handler: thread main exiting due to uncaught exception
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): java.lang.RuntimeException: Unable to start activity ComponentInfo{gv.tester/gv.tester.mainresult}: java.lang.NullPointerException
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2496)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2512)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.ActivityThread.access$2200(ActivityThr ead.java:119)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1863)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.os.Handler.dispatchMessage(Handler.java:99 )
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.os.Looper.loop(Looper.java:123)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.ActivityThread.main(ActivityThread.jav a:4363)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at java.lang.reflect.Method.invokeNative(Native Method)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at java.lang.reflect.Method.invoke(Method.java:521)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:860)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:618)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at dalvik.system.NativeStart.main(Native Method)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): Caused by: java.lang.NullPointerException
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at gv.tester.mainresult.onCreate(mainresult.java:22)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1047)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2459)
    06-03 17:50:56.711: ERROR/AndroidRuntime(759): ... 11 more
    06-03 17:50:56.741: INFO/Process(58): Sending signal. PID: 759 SIG: 3
    06-03 17:50:56.741: INFO/dalvikvm(759): threadid=7: reacting to signal 3
    06-03 17:50:56.811: INFO/dalvikvm(759): Wrote stack trace to '/data/anr/traces.txt'
    06-03 17:51:06.653: WARN/ActivityManager(58): Launch timeout has expired, giving up wake lock!
    06-03 17:51:06.660: WARN/ActivityManager(58): Activity idle timeout for HistoryRecord{43e88680 gv.tester/.mainresult}
    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
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    >
     
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical">
     
     
     
        <TextView 
        android:id="@+id/Titlecapital1" 
        android:text="Result" 
        android:gravity="center"
        android:background="#FF5555"
        android:layout_width="240px" 
        android:layout_height="wrap_content"
        ></TextView>
     
        <TextView
        android:layout_width="wrap_content" 
        android:text="Result Monument lvl1"
        android:layout_gravity="left"
        android:layout_marginTop="15px"
        android:layout_height="wrap_content"></TextView>
        <TextView 
        android:gravity="left" 
        android:layout_width="wrap_content" 
        android:text="result :" 
        android:layout_height="wrap_content"></TextView>
     
     
    	<TextView
        android:id="@+id/text2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"></TextView>
     
     
    </LinearLayout>
    </ScrollView>
    cependant lorsque que je supprime la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String R=resultmonument1.getText().toString();
    tout fonctionne, je peut insérer tu text dans la textview et le layout fonctionne.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Dans le fichier XML n'a pour id "text1" résultat "h1=(TextView)findViewById(R.id.text1);" retourne null et l'appel de h1.getText léve un NullPointerException puisque h1 est null.

    Faut modifier le XML en mettant @+id/text1 sur un des textView

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Oui parce que Text1 viens d'un autre layout !

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    D'accord mais pour pouvoir accéder à un élément il faut qu'il soit dans la vue (référence directe ou include), de ce fait si le XML ci-dessus est celui appelé dans le setContentview (=result.xml ?), alors le findViewById(R.id.text1) ne peut retourner car, text1 n'existe pas.

    Le fichier R contient toutes les références ID ajoutés dans tous les layout, drawable, string etc, mais pour pouvoir y accéder dans une activité il faut injecter le layout correspondant.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    et comment on peut faire cela ?

    Ou alors puis-je faire appel à une variable d'un autre sous projet ?

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    1 - Je n'arrive pas à afficher ma variable "h2" dans le layout

    2 - Je ne sais pas comment sauvegarder une variable pour la retrouver après la fermeture du programme (je pense qu'il faut les insérer dans le cache )
    Je ne sais pas si avec les réponses données tu as réussi à répondre à ta question 1.

    Pour ta 2éme question, les mots clé a cherché sur un moteur de recherche, c'est persistance des données, si je ne me trompe pas et si j'ai bien compris la question.

    peut-être ce lien : http://blogah.arvyoo.com/2011/04/and...edpreferences/

  13. #13
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    et comment on peut faire cela ?
    C'est ce que t'as expliqué Aerinder, les ressources que tu peux récupérer vie le FindViewbyId ne sont que celle qui sont déclaré dans le layout chargé dans le ContentView(). Donc si tu veux avoir accès à la ressource text1 il faut que celle ci soit présente dans le layout chargé dans le contentview de ton activity en cours (soit dans l'exemple result).


    Ou alors puis-je faire appel à une variable d'un autre sous projet ?
    Ce n'est pas des variables que nous traitons ici mais bel et bien des ressources. Donc non tu ne peux pas accéder à des composant (view,...) qui n’appartiennent pas à la vue en cours .


    2 - Je ne sais pas comment sauvegarder une variable pour la retrouver après la fermeture du programme (je pense qu'il faut les insérer dans le cache )
    Comme te la signalé radjant1 , c'est bien du côté des persistance de donnée que tu trouveras tes réponses . Ce sujet a été abordé plusieurs fois sur ce forum .

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Bah concernant ma première question, on m'a dit que sa vient du fait que ma variable ne soit pas dans le layout.
    J'ai donc recherché pour "injecter" des informations (textview ...) d'un autre layout que mon principal, mais je n'ai rien trouvé.


    Pour la deuxième je te remercie grandement. c'est sur qu'avec les termes c'est plus facile

  15. #15
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut
    A mon avis; tu devrais changer ta façon de concevoir les choses; et oublier ton idée de "Je veux à tout prix récupérer la valeur d'un TextView présent dans un autre Layout".

    Plusieurs autres solutions se posent devant toi:
    Passer l'information lorsque tu passes d'une Activity à une autre via les Intent et Bundle.
    Utiliser les SharedPreferences si c'est une information commune à tous les programmes, et devant être restaurée à chaque redémarrage de celui-ci.
    Utiliser une classe contenant cette information; ton TextView récupère cette valeur pour l'afficher, et quand l'utilisateur le change, via un Listener, tu mets à jour la valeur dans la classe; et ainsi cette classe pourra être aussi utilisée dans ton autre View.

    Voilà voilà

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    oki merci a vous tous pour votre aide

Discussions similaires

  1. Sauvegarde / restauration d'une base sur un autre PC
    Par LEF97 dans le forum Administration
    Réponses: 2
    Dernier message: 31/08/2005, 16h22
  2. Comment réutiliser une interface d'un scannner ?
    Par baume dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 18/06/2005, 01h08
  3. [VB.NET] Probleme pour réutiliser une sockets ??
    Par fdiedler dans le forum Windows Forms
    Réponses: 12
    Dernier message: 10/03/2005, 15h37
  4. [C#] [VS.NET] Réutiliser une Form d'une application windows?
    Par yannick_sch dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/10/2004, 15h28
  5. Sauvegarde efficace d'une base MySql sous Linux
    Par Arioch dans le forum Administration
    Réponses: 9
    Dernier message: 19/09/2004, 11h24

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