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

Fermé
Lucy - Modifié le 3 déc. 2019 à 08:50
 Lucy - 3 déc. 2019 à 17:29
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 !
A voir également:

1 réponse

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
Modifié le 3 déc. 2019 à 09:04
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();
...


1
Bonjour. Non le problème ne vient pas de là, le outputstream a été fermé
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 3 894
3 déc. 2019 à 14:59
0
Merci beaucoup!
0