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