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:
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:
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:
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 :)