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 :

Appel d'une classe lors d'un clic d'un boutton


Sujet :

Android

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Points : 150
    Points
    150
    Par défaut Appel d'une classe lors d'un clic d'un boutton
    Bonjour

    Je suis un programmeur WinDev et je dois réaliser un programme sous WinDev Mobile.

    Pour ce projet je dois installer 3 fichiers .cer.
    J'ai trouvé un code sur le net en Java pour pouvoir installer des certificats.

    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
    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
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.security.KeyStore;
    import java.security.cert.Certificate;
    import java.security.cert.CertificateFactory;
     
    public class ImportCa {
     
        public static void m(String[] argv) throws Exception {
     
        String certfile = "/storage/sdcard0/certificat.crt"; /*your cert path*/
        FileInputStream is = new FileInputStream("yourKeyStore.keystore");
     
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        keystore.load(is, "yourKeyStorePass".toCharArray());
     
        String alias = "youralias";
        char[] password = "yourKeyStorePass".toCharArray();
     
        //////
     
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream certstream = fullStream (certfile);
        Certificate certs =  cf.generateCertificate(certstream);
     
        ///
        File keystoreFile = new File("yourKeyStorePass.keystore");
        // Load the keystore contents
        FileInputStream in = new FileInputStream(keystoreFile);
        keystore.load(in, password);
        in.close();
     
        // Add the certificate
        keystore.setCertificateEntry(alias, certs);
     
        // Save the new keystore contents
            FileOutputStream out = new FileOutputStream(keystoreFile);
            keystore.store(out, password);
            out.close();
        }
     
        static private InputStream fullStream ( String fname ) throws IOException {
            FileInputStream fis = new FileInputStream(fname);
            DataInputStream dis = new DataInputStream(fis);
            byte[] bytes = new byte[dis.available()];
            dis.readFully(bytes);
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            return bais;
        }
    }
    J'ai installé Eclipse, puis j'ai suivi un tutoriel pour pouvoir créer des .apk sous Eclispe.

    Je crée mon projet certificat avec :
    - une classe ImportCa.java=>le code au dessus.
    - une classe MainActivity.java et activity_main.xml=> là j'ai mis un bouton et voici le code :
    activity_main.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
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.etib.certificat.MainActivity" >
     
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
     
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="45dp"
            android:layout_marginTop="33dp"
     
            android:onClick="clickFunc"
     
            android:text="Button" />
     
    </RelativeLayout>
    MainActivity.java
    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
    package com.etib.certificat;
     
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.app.Activity;
    import android.view.View;
    import android.widget.Toast;
    import android.view.View.OnClickListener;
    import android.widget.Button;
     
    public class MainActivity extends ActionBarActivity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
     
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
     
        public void clickFunc(View view) throws Exception{
            // Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
            ImportCa.main();
            finish();
                    System.exit(0);
        }
    }
    Mais là, j'ai une erreur sur avec le message est :
    the methode main(string[]) in the type ImportCa is not applicable for the arguments()
    Je ne sais pas ce que je dois mettre dans les parenthèses.

    Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

    Le but de l'application est de s'ouvrir, exécuter la class ImportCa, et puis fermer l'application.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,
    the methode main(string[]) in the type ImportCa is not applicable for the arguments()
    Le message veut simplement dire que la méthode main de la classe ImportCa ne peut être appelée comme tu l'as fait.
    En analysant ton code, j'ai remarqué que tu prévois dans la classe ImportCa un argument (tableau de chaîne de caractères) pour la méthode main . Donc lors de l'appel de cette méthode, tu devrais respecter sa signature et c'est ce que tu n'as pas fait.
    Je te propose deux astuces :
    1. Soit tu respectes dans l'appel la signature de la méthode en passant un tableau de chaîne de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void clickFunc(View view) throws Exception{
            // Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
            String tabS[] = {"MasterMbg","Java"};
            importCa.main(tabS);
            finish();
            System.exit(0);
        }
    2. Soit tu enlèves le paramètre de la méthode main de sa signature (parce que le tableau en paramètre n'est utilisé nulle part dans le corps de la méthode) et tu laisses son appel intacte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public static void main(/* sans paramètre */) throws Exception {
    //Tu remets le corps de la méthode
    }
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Points : 150
    Points
    150
    Par défaut
    Bonjour

    Oui je savais que j'avais un soucis, mais je n'arrivais pas a créer un tableau de chaîne pour passer à ma procédure.
    J'ai tout simplement supprimer le paramètre.

    Mais pourquoi lorsqu'on crée une classe, automatique il y a en paramètre "String argv" et à quoi ça sert?

    Cordialement law56100

  4. #4
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Mais pourquoi lorsqu'on crée une classe, automatique il y a en paramètre "String argv" et à quoi ça sert?
    Salut, String[] argv est un tableau qui contiendra les paramètres passé à l’exécution de ton programme.
    En gros si tu exécute ton programme en ligne de commande tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java myProgram argument1 argument2 argument3
    Et dans ton code tu peut récupérer ces arguments :
    argv[1] représentera donc "argument1".
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

Discussions similaires

  1. [Python 2.X] TypeError :__init__() lors de l'appel d'une classe
    Par aurelie.guegan.15 dans le forum Général Python
    Réponses: 2
    Dernier message: 10/12/2014, 10h43
  2. fonction appliquant une class lors d'un clic
    Par nicoaix dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 14/05/2008, 10h16
  3. [applet][Debutante] Appel a une classe externe
    Par Skydoll dans le forum Applets
    Réponses: 3
    Dernier message: 30/01/2006, 10h31
  4. Réponses: 14
    Dernier message: 04/12/2005, 08h08
  5. [PL/SQL]Appel d'une classe/méthode java
    Par marsup54 dans le forum SQL
    Réponses: 4
    Dernier message: 30/06/2004, 16h44

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