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

API standards et tierces Android Discussion :

Erreur avec socket et asynctask quand unknownHostException


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut Erreur avec socket et asynctask quand unknownHostException
    Salut à tous,
    J'ai fait le code suivant pour récuperer un XML depuis un serveur:
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    public void getXMLData()
        {
            if (skipUpdate)
            {
                skipUpdate=false;
                return;
            }
            skipUpdate=true;
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            int SERVERPORT=0;
            try {
                SERVERPORT = Integer.parseInt(prefs.getString("pref_key_port_1","Port"));
            } catch (NumberFormatException e) {
                txtStatus.setText("Invalid Port Number");
                return;
            }
            String SERVERHOST = prefs.getString("pref_key_host_1","127.0.0.1");
            String PASSWORD = prefs.getString("pref_key_pass_1", "password");
            try {
                XMLFetcherTask myXMLFetcherTask = new XMLFetcherTask(SERVERHOST,SERVERPORT,PASSWORD);
                myXMLFetcherTask.execute();
            } catch (Exception e) {
                txtStatus.setText("Error "+e.getMessage());
                return;
            }
     
     
            skipUpdate=false;
        }
     
     
        public class XMLFetcherTask extends AsyncTask<Void, Void, Void> {
     
        String dstAddress;
        int dstPort;
        String response = "";
        String password="";
     
        XMLFetcherTask(String addr, int port, String pass){
            dstAddress = addr;
            dstPort = port;
            password=pass;
        }
     
        @Override
        protected Void doInBackground(Void... arg0) {
     
            Socket socket = null;
     
            try {
                socket = new Socket(dstAddress, dstPort);
     
     
                PrintWriter out = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream())),
                        true);
                out.println(password);
     
                response="";
                BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                while (response.toLowerCase().indexOf("</response>")<0)
                {
                    response+=input.readLine();
                }
     
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
               txtStatus.setText("UnknownHostException: " + e.getMessage());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                txtStatus.setText("IOException: " + e.getMessage());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                txtStatus.setText("Exception: " + e.getMessage());
            } finally{
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        //txtStatus.setText("Exception Finally: " + e.getMessage());
                    }
                }
            return null;
        }
     
        @Override
        protected void onPostExecute(Void result) {
     
            if( !(response.substring(0,5).equalsIgnoreCase("<resp") || response.substring(0,5).equalsIgnoreCase("<?xml")) ) //!response.substring(0,5).equalsIgnoreCase("<?xml") ||
            {
                txtStatus.setText("Server response doesn't look XML, please check password: '"+response.substring(0,5)+"'");
            } else {
                lastXMLData=response;
                txtStatus.setText("Resp Len: " + response.length());
                skipUpdate=false;
                updateFragmentListeners();
            }
     
            super.onPostExecute(result);
        }
     
    }
    Et alors tout marche bien, sauf quand je catch UnknownHostException, a ce moment mon app plante avec le stack suivant:
    07-29 15:52:08.754 1525-1538/android.process.acore V/BackupServiceBinder? doBackup() invoked
    07-29 15:52:08.766 1525-1538/android.process.acore E/DictionaryBackupAgent? Couldn't read from the cursor
    07-29 16:29:55.178 1525-1534/android.process.acore E/StrictMode? A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'close' not called
    at dalvik.system.CloseGuard.open(CloseGuard.java:184)
    at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
    at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
    at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
    at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:71)
    at android.os.Binder.execTransact(Binder.java:446)
    07-29 16:29:55.178 1525-1534/android.process.acore E/StrictMode? A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'close' not called
    at dalvik.system.CloseGuard.open(CloseGuard.java:184)
    at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
    at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
    at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
    at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:64)
    at android.os.Binder.execTransact(Binder.java:446)
    07-29 16:29:55.178 1525-1534/android.process.acore E/StrictMode? A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'close' not called
    at dalvik.system.CloseGuard.open(CloseGuard.java:184)
    at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:180)
    at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:916)
    at android.os.ParcelFileDescriptor$1.createFromParcel(ParcelFileDescriptor.java:906)
    at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:57)
    at android.os.Binder.execTransact(Binder.java:446)
    Je vois vraiment pas d'ou ça peut venir...
    J'ai commenté les txtStatus.setText mais ça ne change rien...

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut
    Bon j'ai réeussi en utilisant un thread a la place

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    public void getXMLData()
        {
            if (skipUpdate)
            {
                skipUpdate=false;
                return;
            }
            skipUpdate=true;
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            int SERVERPORT=0;
            try {
                SERVERPORT = Integer.parseInt(prefs.getString("pref_key_port_1","Port"));
            } catch (NumberFormatException e) {
                txtStatus.setText("Invalid Port Number");
                return;
            }
            String SERVERHOST = prefs.getString("pref_key_host_1","127.0.0.1");
            String PASSWORD = prefs.getString("pref_key_pass_1", "password");
            try {
               // XMLFetcherTask myXMLFetcherTask = new XMLFetcherTask(SERVERHOST,SERVERPORT,PASSWORD);
               // myXMLFetcherTask.execute();
                XMLFetcherTask XMLFetcherTaskThread = new XMLFetcherTask();
                XMLFetcherTaskThread.dstAddress=SERVERHOST;
                XMLFetcherTaskThread.dstPort=SERVERPORT;
                XMLFetcherTaskThread.password=PASSWORD;
                Thread cThread = new Thread(XMLFetcherTaskThread);
                cThread.start();
     
            } catch (Exception e) {
                txtStatus.setText("Error "+e.getMessage());
                return;
            }
     
     
            skipUpdate=false;
        }
     
        public class XMLFetcherTask implements Runnable {
            String dstAddress;
            int dstPort;
            String response = "";
            String password="";
     
            private void setStatusFromThread(final String status)
            {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        setStatus(status);
                    }
                });
     
            }
     
            private void updateListenersThread()
            {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        updateFragmentListeners();
                    }
                });
     
            }
     
            public void run() {
                Socket socket = null;
                //BufferedReader input = null;
                //PrintWriter out = null;
     
                try {
                    socket = new Socket(dstAddress, dstPort);
     
     
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(socket.getOutputStream())),
                            true);
                    out.println(password);
     
                    response="";
                    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    while (response.toLowerCase().indexOf("</response>") < 0) {
                        response+=input.readLine();
                    }
                    if( !(response.substring(0,5).equalsIgnoreCase("<resp") || response.substring(0,5).equalsIgnoreCase("<?xml")) ) //!response.substring(0,5).equalsIgnoreCase("<?xml") ||
                    {
                        setStatusFromThread("Server response doesn't look XML, please check password: '" + response.substring(0, 5) + "'");
                    } else {
                        lastXMLData=response;
                        Date dNow = new Date( );
                        SimpleDateFormat ft = new SimpleDateFormat ("hh:mm:ss");
                        setStatusFromThread("Last update: " + ft.format(dNow));
                        skipUpdate=false;
                        updateListenersThread();
                    }
     
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    setStatusFromThread("UnknownHostException: " + e.getMessage());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    setStatusFromThread("IOException: " + e.getMessage());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    setStatusFromThread("Exception: " + e.getMessage());
                } finally{
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        //txtStatus.setText("Exception Finally: " + e.getMessage());
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
     
                    }
                }
     
            }
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur avec socket "un argument non valide à ete fournie"
    Par Abdelweheb dans le forum Réseau
    Réponses: 1
    Dernier message: 16/05/2012, 09h14
  2. Erreur connexion socket avec Hyper-V
    Par manue85 dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 11/03/2011, 11h52
  3. socket : erreur avec bind()
    Par horkets dans le forum Réseau
    Réponses: 11
    Dernier message: 30/10/2006, 11h47
  4. erreur de socket avec applet
    Par fumiste972 dans le forum Applets
    Réponses: 3
    Dernier message: 18/07/2006, 16h11
  5. Erreur de socket avec le composant Indy idHTTP
    Par Etanne dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/10/2004, 11h27

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