Unexpected end of stream on com.android.okhttp.address

Signaler
-
 Lucy -
Bonjour !

Je suis sur le dévéloppement d'une application mobile. J'essaye d'envoyer un formulaire dans un serveur externe. Mais à l'envoie du formulaire, j'ai une exception : "unexpected end of stream on com.android.okhttp.address".
J'ai pas utilisé la librairie okHttp, je ne comprends pas pourquoi j'ai cette erreur. J'ai juste utilisé httpUrlConnection et Asynctask.

Ma classe


public class InscriptionHttpUrlConn {

    public String envoiDonnee(String requestURL, HashMap<String, String> postDataParams) {
        URL url;
        StringBuilder sb = new StringBuilder();//store message retrieved from the server


        try {
            url = new URL(requestURL); //Initilise l'url

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);

            OutputStream os = conn.getOutputStream(); //Crée un outputStream

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); //Écriture des paramètres
            writer.write(getPostDataString(postDataParams));
            writer.flush();
            writer.close();

            /*DataOutputStream out = new DataOutputStream(conn.getOutputStream());
            out.writeBytes(getPostDataString(postDataParams));
            out.flush();
            out.close();*/

            int responseCode = conn.getResponseCode();
            if (responseCode == HttpsURLConnection.HTTP_OK) {
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                sb = new StringBuilder();
                String response;
                //Lit la réponse du serveur
                while ((response = br.readLine()) != null) {
                    sb.append(response);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();

        }
        return sb.toString();
    }

    public String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            sb.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
            sb.append("=");
            sb.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
            sb.append("&");
        }

        return sb.toString();
    }
}





La méthode insert() qui est appelée quand l'utilisateur clique sur le bouton "envoyer " du formulaire


private void insert() {
        strUsername = userName.getText().toString().trim();
        strNom = nom.getText().toString().trim();
        strPrenom = prenom.getText().toString().trim();
        strEmail = email.getText().toString().trim();
        strMdp = mdp.getText().toString().trim();
        class Insert extends AsyncTask<String, Void, String> {
            ProgressDialog progressDialog;

            @Override
            protected String doInBackground(String... strings) {
                HashMap<String, String> parametres = new HashMap<>();
                HashMap<String, String> hashMapUser = new HashMap<>();

                //Client user = new Client(strUsername, strEmail, strNom, strPrenom);

                hashMapUser.put("userName", strUsername);
                hashMapUser.put("email", strEmail);
                hashMapUser.put("lastName", strNom);
                hashMapUser.put("firstName", strPrenom);

                parametres.put("user", String.valueOf(hashMapUser));
                parametres.put("pwd", strMdp);

                InscriptionHttpUrlConn insHttpUrlConn = new InscriptionHttpUrlConn();
                String hc = insHttpUrlConn.envoiDonnee("http://69.159.182.204:9876/isserver/users", parametres);
                return hc;
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog = ProgressDialog.show(ctx, "Enregistrement...", "En cours...", false, false);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                progressDialog.dismiss();
                Intent intent = new Intent(ctx, ConfirmationInscription.class);
                startActivity(intent);
            }
        }

        Insert in = new Insert();
        in.execute();

    }



Je dois seulement envoyer deux paramètres dans ma requête, user(qui contient le nom , le prénom, l'email, le pseudo) et pwd (qui contient le mot de passe). C'est ce que j'ai d'ailleurs fait.

Est-ce que quelqu'un peut m'aider à trouver l'erreur svp ? Merci d'avance !

5 réponses

Messages postés
14685
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 décembre 2019
1349
Hello,

Je pense qu'il manque la fermeture de ton
OutputStream


OutputStream os = conn.getOutputStream(); //Crée un outputStream

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); //Écriture des paramètres
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();

os.close(); // Fermeture de l'outputStream

int responseCode = conn.getResponseCode();
...


@+ 
Buno, Modérateur 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
Bonjour. Non le problème ne vient pas de là, le outputstream a été fermé
BunoCS
Messages postés
14685
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 décembre 2019
1349