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 :

Bug accès base de données


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2016
    Messages : 1
    Par défaut Bug accès base de données
    Bonjour, lorsque j'essai de me connecter à une base de données sur android studio, j'obtiens un bug, l'appli crash et j'obtiens ceci dans les logs sur android studio :

    09-11 19:07:46.240 2008-2797/chamoux.annonces E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:299)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:856)
    Caused by: java.lang.NullPointerException: lock == null
    at java.io.Reader.<init>(Reader.java:64)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:79)
    at chamoux.annonces.BackgroundTask.doInBackground(BackgroundTask.java:68)
    at chamoux.annonces.BackgroundTask.doInBackground(BackgroundTask.java:28)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:856)

    concernant le code, voici le code de la classe lié à ma page 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
    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
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
     
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
     
     
     
    public class ConnexionActivity extends Activity {
     
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.connexion);
     
            Button myButton = (Button) findViewById(R.id.button6);
            Button myButton2 = (Button) findViewById(R.id.button15);
     
     
            myButton.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view) {
                    Intent myIntent = new Intent(ConnexionActivity.this, MainActivity.class);
                    startActivity(myIntent);
                }
            }
     
            );
     
     
        }
     
     
        // la fonction appelé par mon bouton
        public void userLog(View view){
     
            ConnectivityManager connMgr = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
     
                EditText mye = (EditText) findViewById(R.id.editText2);
                EditText mye2 = (EditText) findViewById(R.id.editText3);
     
                String pseud = mye.getText().toString();
                String mdp = mye2.getText().toString();
                String method = "login";
     
                //appel de ma fonction en asynctask qui fait planter
                BackgroundTask backgroundTask = new BackgroundTask(this);
                backgroundTask.execute(method,pseud,mdp);
            }
            else
            {
                //message flottant
                Toast.makeText(getBaseContext(),"non connecté",Toast.LENGTH_SHORT).show();
            }
        }
     
     
     
    }
    le code de BackgroundTask :


    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
     
    import android.content.Context;
    import android.os.AsyncTask;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.support.v7.app.AlertDialog;
    import android.widget.Toast;
     
     
    public class BackgroundTask extends AsyncTask<String, Void, String> {
     
        AlertDialog al;
        Context ctx;
        BackgroundTask(Context ctx)
        {
            this.ctx = ctx;
        }
     
        @Override
        protected void onPreExecute()
        {
            al = new AlertDialog.Builder(ctx).create();
            al.setTitle("Erreur connexion");
        }
     
        @Override
        protected String doInBackground(String... params) {
            String method = params[0];
            String log_url = "liendemapage";
     
            if(method.equals("login"))
            {
                String pseud = params[1];
                String mdp = params[2];
     
                try {
                    URL url = new URL(log_url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);
                    OutputStream OS = httpURLConnection.getOutputStream();
                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS,"UTF-8"));
                    String data = URLEncoder.encode("user","UTF-8") + "=" + URLEncoder.encode(pseud,"UTF-8") + "&" + URLEncoder.encode("mdp","UTF-8") + "=" + URLEncoder.encode(mdp,"UTF-8");
                    bufferedWriter.write(data);
                    bufferedWriter.flush();
                    bufferedWriter.close();
                    OS.close();
                    InputStream IS = httpURLConnection.getErrorStream();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(IS,"iso-8859-1"));
                    String rep = "";
                    String line =  "";
     
                    while((line = bufferedReader.readLine())!=null)
                    {
                        rep += line;
                    }
     
                    bufferedReader.close();
                    IS.close();
                    httpURLConnection.disconnect();
     
                } catch (IOException e) {
                    e.printStackTrace();
                }
     
            }
     
            return null;
        }
     
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
     
        @Override
        protected void onPostExecute(String result) {
            if(result.equals("non"))
            {
                al.setMessage("Mail ou mot de passe incorrect");
                al.show();
            }
        }
    }
    mon activité BackgroundTask n'est pas référencé dans le manifeste (je pense que c'est normal), par contre, l'autorisation de connexion est activé dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    petite info si je met un mauvais URL, cela ne fait plus crash l'appli mais elle m'affiche un message vide dans l'alerte. Par contre si je met le bon lien, même si le fichier php est vide.

    Merci d'avance pour votre votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Tout est dans l'exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    java.lang.RuntimeException: An error occured while executing doInBackground()
    ....
    Caused by: java.lang.NullPointerException: lock == null
    at java.io.InputStreamReader.<init>(InputStreamReader.java:79)
    at chamoux.annonces.BackgroundTask.doInBackground(BackgroundTask.java:68)
    Ligne 68 du ficher BackgroundTask.java (dans la fonction doInBackground de la classe chamoux.annonces.BackgroundTask) on crée un InputStreamReader (new) avec un object null...


    A vue de nez, je dirais que "IS" (attention aux noms de variable....) est null....
    D'ailleurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream IS = httpURLConnection.getErrorStream();
    il est bien null si il n'y a pas de flux d'erreur !

    (getInputStream ? )

    D'ailleurs, je ne voudrais pas dire de bétise, mais il me semble qu'il ne faut pas appeler "close()" sur ces streams là (ils sont gérés par la connexion... mais ça fait longtemps que je n'ai plus mis les mains dans URLConnection....).

Discussions similaires

  1. Accès Base de données Access
    Par vincent magnin dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/06/2006, 12h09
  2. Problème accès base de données
    Par alainconnu dans le forum Outils
    Réponses: 3
    Dernier message: 27/04/2006, 09h31
  3. [PHPMyAdmin] Accès base de donnée pour utilisateur
    Par nicodeme dans le forum Outils
    Réponses: 2
    Dernier message: 04/03/2006, 01h10
  4. [C#]Global.asax et accès base de données.
    Par R'SKaP dans le forum ASP.NET
    Réponses: 13
    Dernier message: 26/01/2006, 15h00
  5. [Kylix] Kylix et accès Base de données
    Par Oyoboy dans le forum EDI
    Réponses: 16
    Dernier message: 22/06/2004, 16h41

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