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 :

Partager via SMS des données récupérées sur le net


Sujet :

Android

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut Partager via SMS des données récupérées sur le net
    Bonjour à tou-te-s,

    J'ai une activity dans laquelle je récupère un texte stocké dans un fichier txt sur le net.

    Voici le début du code de la réalisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TextView tv = (TextView) findViewById(R.id.tv);
     
    		String myString = null;
    		try {
    			/* Define the URL we want to load data from. */
    			URL myURL = new URL("urldufichier");
    			/* Open a connection to that URL. */
    			URLConnection ucon = myURL.openConnection();
     
    			/* Define InputStreams to read 
    			 * from the URLConnection. */
    			InputStream is = ucon.getInputStream();
    			BufferedInputStream bis = new BufferedInputStream(is);
    J'ai crée un menu afin de pouvoir partager ce texte via sms (ou email).
    Le menu fonctionne, la vue pour l'envoi de sms s'affiche.Mais au lieu d'avoir le texte souhaité dans le corps du sms ou de l'email, j'ai le texte "false" qui s'affiche.
    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	private void doShare() {
    		final Intent sendMailIntent = new Intent(Intent.ACTION_SEND);
    		sendMailIntent.setType("text/plain");
    		sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.sendtexte));
    		sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.id.tv));
    		startActivity(Intent.createChooser(sendMailIntent, "Envoyer un message"));
    	}
    L'erreur vient de (Intent.EXTRA_TEXT, getString(R.id.tv));
    Mais je ne vois pas comment faire.

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Points : 494
    Points
    494
    Par défaut
    Bonjour,
    Il me semble que ce n'est pas getString() mais plutot getRessource().getString().
    Tiens nous au courant.

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    merci AndroChristophe pour ton aide.
    j'ai suivi ton conseil et changé
    sendMailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.id.tv));
    par
    sendMailIntent.putExtra(Intent.EXTRA_TEXT, getRessource().getString(R.id.tv));

    Par contre j'ai un erreur sur getRessource.
    getRessource is undefined. Eclipse me propose de créer une méthode.

  4. #4
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    plutôt getResources

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendMailIntent.putExtra(Intent.EXTRA_TEXT, getResources().getString(R.id.tv));

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    hu hu merci Feanorin pour mes grosse fautes

    Je viens de tester avec la bonne orthographe, soit :
    sendMailIntent.putExtra(Intent.EXTRA_TEXT, getResources().getString(R.id.tv));

    Je reviens à l'erreur de départ, dans l'émlulateur, dans la vue de l'envoi de sms, j'ai "false" qui est affiché au lieu du texte du textview.

  6. #6
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Juste comme ça tes chaîne tu les mets dans le fichiers strings donc pour chercher ces chaînes dans les ressources c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getString(R.string.name)
    ;

    Maintenant si tu veux récupérer ta chaîne de ta TextView .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TextView tv =( TextView) findViewById(R.id.tv);
    tv.getText();
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sendMailIntent.putExtra(Intent.EXTRA_TEXT, tv.getText());

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    ok,j'ai compris que getString(R.id.xxxx) récupère des données du fichiers string

    j'ai suivi tes conseils (et donc appris des choses, merci)
    Je n'ai plus "false" dans l'emulateur, mais le texte ne s'affiche pas (il n'y a rien).

    Je butte sur une partie de ton aide.
    J'ai ajouté ton aide dans ma fonction doShare,ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void doShare() {
    TextView tv = (TextView) findViewById (R.id.tv);
    tv.getText();
    final Intent sendMailIntent = new Intent(Intent.ACTION_SEND);
    sendMailIntent.setType("text/plain");
    sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.sendtexte));
    sendMailIntent.putExtra(Intent.EXTRA_TEXT, tv.getText());
    startActivity(Intent.createChooser(sendMailIntent, "Envoyer un message"));
    	}
    J'ai aussi tenté de mettre le tv.getText(); dans le début de la classe, mais toujours le même résultat

    Voici maintenant à quoi ressemble le code:
    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
    public class Lun extends Activity {
    
        public void onCreate (Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.lun);
    
        	/* We will show the data we read in a TextView. */
        	TextView tv = (TextView) findViewById (R.id.tv);
        	tv.getText();
    
    		/* Will be filled and displayed later. */
    		String myString = null;
    		try {
    			/* Define the URL we want to load data from. */
    			URL myURL = new URL("url/fichier.txt");
    			/* Open a connection to that URL. */
    			URLConnection ucon = myURL.openConnection();

  8. #8
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    ok,j'ai compris que getString(R.id.xxxx) récupère des données du fichiers string
    Toujours pas , c'est dans le R.string.xxx .
    les R.id c'est pour récupérer les identifiant de tes objets.


    Tu as déclaré un text dans ton layout associé à ta textview ?

    http://developer.android.com/referen...#getText%28%29

    Vu ton code à aucun moment tu met à jour ta textview après avoir récupérer ta chaîne . Après avoir récupèrer ta chaîne met à jour ta textview avec la procédure setText
    http://developer.android.com/referen...harSequence%29

  9. #9
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Tu as déclaré un text dans ton layout associé à ta textview ?
    Hmmm. Il doit effectivement y avoir une étape que j'ai raté et pas compris.
    Voici mon layout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <TextView android:id="@+id/tv" android:paddingLeft="10pt" android:paddingTop="8pt" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:textSize="7pt" />
    Je devrais ajouter
    android:text="voici mon texte de la textview"
    ?
    Alors que le texte de la textview est un texte d'un fichier txt hébergé sur internet ?

  10. #10
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Je devrais ajouter
    Citation:
    android:text="voici mon texte de la textview"
    ?
    Si tu veux avoir un texte de base alors oui .


    Alors que le texte de la textview est un texte d'un fichier txt hébergé sur internet ?
    Donc c'est là ou je te disait que dans ton code à aucun moment tu mets à jour ta textview .
    Après avoir récupèrer ta chaîne met à jour ta textview avec la procédure setText
    Donc tu aurais tv.setText(machainecontenantletextedufichiertxt);

    http://developer.android.com/referen...harSequence%29

  11. #11
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Merci pour ton aide et ton temps, c'est très gentil.

    Voici mon code complet :
    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
    public class Lun extends Activity {
    public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.lun);
    TextView tv = (TextView) findViewById (R.id.tv);
    
    String myString = null;
    	try {
    	URL myURL = new URL("url/fichier.txt");
    	URLConnection ucon = myURL.openConnection();
    	InputStream is = ucon.getInputStream();
    	BufferedInputStream bis = new BufferedInputStream(is);
    	ByteArrayBuffer baf = new ByteArrayBuffer(50);
    	int current = 0;
    	while((current = bis.read()) != -1){
    	baf.append((byte)current);
    	}
    
    	myString = new String(baf.toByteArray());
    	} catch (Exception e) {
    	myString = e.getMessage();
    	}
    	tv.setText(myString);
    
    	public boolean onCreateOptionsMenu(Menu menu) {
    		MenuInflater inflater = getMenuInflater();
    		inflater.inflate(R.layout.menu, menu);
    		return true;
    	}
    
    private void doShare() {
    TextView tv = (TextView) findViewById (R.id.tv);
    final Intent sendMailIntent = new Intent(Intent.ACTION_SEND);
    sendMailIntent.setType("text/plain");
    sendMailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.sendtexte));
    sendMailIntent.putExtra(Intent.EXTRA_TEXT, tv.getText());
    startActivity(Intent.createChooser(sendMailIntent, "Envoyer un message"));
    	}
    
    public boolean onOptionsItemSelected(MenuItem item) {
    	switch (item.getItemId()) {
    	case R.id.quit:      finish();
    	Toast.makeText(this, "retour", Toast.LENGTH_LONG).show();
    	break;
    	case R.id.contact: this.doShare();
    	break;
    	}
    	return true;
    }
    Pour le moment il n'y a aucune erreur.
    Mon soucis d'envoi du text par sms n'est malheureusement pas résolu.

    Dans l'émulateur, lorsque je clique dans "menu", puis "partager", j'ouvre la vue de l'envoi de sms. Je n'ai plus le message "false" dans le corps su mail, mais "type to compose".
    Voyez-vous pourquoi ?
    Encore merci.

  12. #12
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Peux tu me dire ce que tu récupère dans la chaîne MyString ou ce que tu as affiché dans ta TextView ?

  13. #13
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Peux tu me dire ce que tu récupère dans la chaîne MyString ou ce que tu as affiché dans ta TextView ?
    Je récupère le texte de fichier.txt hébergé sur internet.
    Via la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL myURL = new URL("url/fichier.txt");
    J'ai évidemment modifié url par l'adresse adéquate

  14. #14
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Désolé je n'ai pas été très clair dans ma demande .
    Peux tu me dire ce que tu récupère dans la chaîne MyString ou ce que tu as affiché dans ta TextView ?
    En fait je voulais savoir justement ce que tu avais dans la variable MyString , et non ou tu le récupérais.
    Il faut que tu passes en mode debug ou alors grâce a un log, pour vérifier ce que tu obtiens en lisant ton fichier "url/fichier.txt".
    Essaye de mettre donc un breakpoint ou un log après cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myString = new String(baf.toByteArray());
    sur le variable myString .

  15. #15
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e(myString, "mon erreur");
    sous la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myString = new String(baf.toByteArray());
    Et voici ce qui apparait sur le logcat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    04-21 22:48:32.425: INFO/ActivityManager(52): Starting activity: Intent { cmp=com.stj.can/com.stj.can.Lun }
    04-21 22:48:32.924: INFO/global(322): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required.
    04-21 22:48:32.924: INFO/global(322): [ 04-21 22:48:32.944   322:0x142 E/Lundi 11 avril 2011
    04-21 22:48:32.924: INFO/global(322): test1
    04-21 22:48:32.924: INFO/global(322): test2
    04-21 22:48:32.924: INFO/global(322): test3
    04-21 22:48:32.924: INFO/global(322):  ]
    Pour info, le fichier txt est composé de 4 lignes (Lundi 11 avril 2011, test1, test2, test3).

    Par contre je viens de m'apercevoir que lors du lancement de l'appli, j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    04-21 22:48:10.944: ERROR/AndroidRuntime(315): ERROR: thread attach failed
    je ne suis à ce moment pas encore sur l'activity qui pose problème, mais sur une activity n-1 (et qui ne récupère aucune donnée d'internet).

    Voyez-vous d'où vient mon erreur ?
    Merci encore pour tout.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/01/2015, 12h51
  2. Réponses: 12
    Dernier message: 24/09/2013, 14h31
  3. Affichage sur PC des données récupérées sur un port parallele
    Par mic68hc11 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/07/2012, 09h06
  4. Réponses: 1
    Dernier message: 29/06/2011, 14h27
  5. Corruption des données téléchargées sur le net
    Par Matthieu Brucher dans le forum Administration
    Réponses: 5
    Dernier message: 27/09/2005, 08h58

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