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 :

Notion de Classe abstraite?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut Notion de Classe abstraite?
    Bonjour,

    je souhaite ajouter, dans les sms envoyés, un sms.

    J'ai récupéré et modifié un bout de code que voici mais j'ai un problème avec le contexte :

    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
    import android.content.ContentValues;
    import android.net.Uri;
    import android.content.Context;
    import java.lang.Exception;
    public static boolean jv_ajoute_sms_sent(String sAdress,String sBody){
    	try {
    		ContentValues values = new ContentValues();
    		Context con = new Context();
    		values.put("address", sAdress);
    		values.put("body", sBody);
    		con.getContentResolver().insert(Uri.parse("content://sms/sent"), values);
    		return true;
    	} 
    	catch(Exception e) {
    		return false;
    	} 
    }
    Lorsque j'instancie Context j'ai l'erreur suivante
    src\fr\xsoftware\graal_sms\wdgen\GWDCPjava_sms_proc.java:56: android.content.Context is abstract; cannot be instantiated
    Context con = new Context();
    Si je ne le fais pas
    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
     import android.content.ContentValues;
    import android.net.Uri;
    import android.content.Context;
    import java.lang.Exception;
    public static boolean jv_ajoute_sms_sent(String sAdress,String sBody){
    	try {
    		ContentValues values = new ContentValues();
    		//Context con = new Context();
    		values.put("address", sAdress);
    		values.put("body", sBody);
    		Context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);
    		return true;
    	} 
    	catch(Exception e) {
    		return false;
    	} 
    }
    j'ai l'erreur suivante:

    src\fr\xsoftware\graal_sms\wdgen\GWDCPjava_sms_proc.java:58: non-static method getContentResolver() cannot be referenced from a static context
    Context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);

    Il me manque donc la compréhension d'une ou de plusieurs notions.
    Pouvez-vous me donner une piste, sachant que je débute totalement en java et programmation android.

    D'avance, merci

  2. #2
    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,

    Essaye comme cela :

    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
    import android.content.ContentValues;
    import android.net.Uri;
    import android.content.Context;
    import java.lang.Exception;
    public static boolean jv_ajoute_sms_sent(Context context,String sAdress,String sBody){
    	try {
    		ContentValues values = new ContentValues();
    		//Context con = new Context();
    		values.put("address", sAdress);
    		values.put("body", sBody);
    		context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);
    		return true;
    	} 
    	catch(Exception e) {
    		return false;
    	} 
    }
    Quand tu l'appelles à partir de ton activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool result = Taclass.jv_ajoute_sms_sent(this,sAdress,sBody);

  3. #3
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    Bonjour,

    et merci pour la prompte réponse.
    Je ne vais pas pouvoir appliquer ta méthode car ce code est appelé depuis windev mobile 16. Et, a priori, je vais pas pouvoir invoquer du code faisant référence à cette notion de contexte depuis windev mobile, sauf peut-être à créer une activity complète sur le modèle suivant que j'ai écrit dans eclipse avec le module ADT

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import android.app.Activity;
    import android.app.PendingIntent;
    import android.content.ContentValues;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.telephony.SmsManager;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
     
    public class Android_sms_01Activity extends Activity {
     
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //On récupère le bouton créer en XML grâce à son id
            Button btnEnvoie = (Button)findViewById(R.id.envoyer);
            //On récupère les deux EditText correspondant aux champs pour entrer le numéro et le message
            final EditText numero =(EditText)findViewById(R.id.numero);
            final EditText message = (EditText)findViewById(R.id.message);
            final Context context= Android_sms_01Activity.this;
            //On affecte un écouteur d'évènement au bouton
            btnEnvoie.setOnClickListener(new OnClickListener() {
     
    			public void onClick(View v) {
    				//On récupère ce qui a été entré dans les EditText
    				String num = numero.getText().toString();
    				String msg = message.getText().toString();
    				//Si le numéro est supérieur à 4 charactère et que le message n'est pas vide on lance la procédure d'envoi
    				if(num.length()>= 4 && msg.length() > 0){
    					//Grâce à l'objet de gestion de SMS (SmsManager) que l'on récupère grâce à la méthode static getDefault()
    					//On envoit le SMS à l'aide de la méthode sendTextMessage
    					SmsManager smsManager = SmsManager.getDefault();
    					try {
    						//smsManager.sendTextMessage(num, null, msg, null, null);
    						PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_SENT"), 0);
    						PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_DELIVERED"), 0);
    						smsManager.sendTextMessage(num, null, msg, sentPI, deliveredPI);
    						Toast toast=Toast.makeText(context, "Sms bien envoyé ...", Toast.LENGTH_LONG);
    						toast.show();
    						try {
    							// store the sent sms in the sent folder (that shouldn't be necessary?!)
    							// a priori, oui, il est nécessaire car Ce n'est pas automatiquement mémorisé par l'API
    							ContentValues values = new ContentValues();
    							values.put("address", num);
    							values.put("body", msg);
    							context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);
     
    						} catch (Exception e) {
    							Toast toast1=Toast.makeText(context, "Erreur !"+ e, Toast.LENGTH_LONG);
    							toast1.show();
    						}
    					} catch (Exception e) {
    						Toast toast=Toast.makeText(context, "Erreur !"+ e, Toast.LENGTH_LONG);
    						toast.show();
    					}
    					//On efface les deux EditText
    					numero.setText("");
    					message.setText("");
    				}else{
    					//On affiche un petit message d'erreur dans un Toast
    					Toast.makeText(context, "Entrer le numéro et/ou le message", Toast.LENGTH_SHORT).show();
    				}
     
    			}
    		});
        }
    }
    Citation Envoyé par Feanorin Voir le message
    Bonjour,

    Essaye comme cela :

    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
    import android.content.ContentValues;
    import android.net.Uri;
    import android.content.Context;
    import java.lang.Exception;
    public static boolean jv_ajoute_sms_sent(Context context,String sAdress,String sBody){
    	try {
    		ContentValues values = new ContentValues();
    		//Context con = new Context();
    		values.put("address", sAdress);
    		values.put("body", sBody);
    		context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);
    		return true;
    	} 
    	catch(Exception e) {
    		return false;
    	} 
    }
    Quand tu l'appelles à partir de ton activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool result = Taclass.jv_ajoute_sms_sent(this,sAdress,sBody);

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Pourrais tu préciser les contrainte qui te sont imposer avec le développement sous WinDev mobile ?

  5. #5
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    Citation Envoyé par MrDuChnok Voir le message
    Salut,

    Pourrais tu préciser les contrainte qui te sont imposer avec le développement sous WinDev mobile ?
    A priori, mais je découvre donc il faut bémoler mes propos, il n'est pas possible de créer de classe. On peut juste créer des méthodes de ce genre :
    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
    import android.net.*;
    import java.lang.Exception;
    // Retourne le nombre d'octets téléchargés par l'application
    public static String DonneTraficTéléchargement(){
    	String result;
    	try{
    		Class<?> trafficStatClass = Class.forName("android.net.TrafficStats");
    		TrafficStats tStats = new TrafficStats();
    		result = Long.toString(tStats.getUidRxBytes(android.os.Process.myUid()));
    		if (result.equals("-1")){
    			return "0";
    		}
    		else{
    			return result;
    		}
    	} 
    	catch(Exception e) {
    		return "0";
    	} 
    }
    et si l'on utilise des objets windev, il faut passer leur identifiant par valeur
    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
    // Personnalise le bouton d'action du clavier virtuel
    import android.widget.EditText;
    import android.widget.Button;
    import android.widget.TextView;
    import android.view.KeyEvent;
    import android.view.inputmethod.InputMethodManager;
    import android.content.Context;
    import android.view.inputmethod.EditorInfo;
     
    public static void PersonnaliseClavier(String sNomDuChampDeSaisie, String sNomDuBouton, int nTypeDeBouton){
    	// Variables
    	final int btn = nTypeDeBouton;
    	final String sNom = sNomDuBouton;
     
    	// On récupère le champ de saisie
    	EditText SAI = (EditText) getView(sNomDuChampDeSaisie);
     
    	// On change son bouton d'action
    	SAI.setImeOptions(nTypeDeBouton);
     
    	// On gère le clic sur le bouton
    	SAI.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    		public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    			if (actionId == btn) {
    				//On masque le clavier
    				InputMethodManager inputMethodManager = (InputMethodManager) getContexteApplication().getSystemService(Context.INPUT_METHOD_SERVICE);				
    				inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
     
    				//Et on exécute le pCode de clic du bouton 
    				Button b = (Button) getView(sNom); 
    				if(b!=null){
    					b.performClick();
    				}
    				return true;
    			}
    			return false;
    		}
    	});
    }

  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Le contexte est disponible dans chacun des composants de ta vue (http://developer.android.com/referen...tContext%28%29 )
    Du coup, si tu as besoin d'une instance du context, et que tu as un moyen de récupéré une instance d'un de tes composants dans ta méthode, tu peux peut être le faire via ce principe. Mais effectivement c'est crassou
    Maintenant, je ne connais pas Windev mobile pour être pertinent sur mes réponses. Désolé.

Discussions similaires

  1. Notion d'héritage et de classes abstraites
    Par Shargat dans le forum C++
    Réponses: 4
    Dernier message: 15/04/2008, 18h27
  2. Notions de classe abstraite
    Par smag dans le forum C++
    Réponses: 11
    Dernier message: 12/06/2005, 02h04
  3. [Debutant][Conception] Classes abstraites et interface.
    Par SirDarken dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 00h02
  4. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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