Bug accès base de données java android
noidcoco
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
noidcoco Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
noidcoco Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
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 :
concernant le code, voici le code de la classe lié à ma page XML :
le code de BackgroundTask :
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 :
<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 :)
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 :
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 :
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 :
<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 :)
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Bug accès base de données java android
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Android recovery - Guide
- Effacer les données de navigation sur android - Guide
- Acces rapide - Guide
8 réponses
Hello,
Tout d'abord, j'ai édité ton message pour gagner en lisibilité. Merci de prendre connaissance du cartouche en fin de message.
Ensuite, le log te dit que tu as une NullPointerException à la ligne 68 de ta BackgroundTask. En regardant de plus près, tu as branché IS sur
Tout d'abord, j'ai édité ton message pour gagner en lisibilité. Merci de prendre connaissance du cartouche en fin de message.
Ensuite, le log te dit que tu as une NullPointerException à la ligne 68 de ta BackgroundTask. En regardant de plus près, tu as branché IS sur
getErrorStream(). C'est voulu? Il n'y a pas tout le temps d'erreur... Donc soit tu t'es trompé de stream, soit tu dois vérifier qu'il n'est pas null...
Merci bien, pour ton aide :)
Le code arrive à se connecter mais le code php ne reçoit pas mes valeurs.
pour le teste mon code php ressemble à ceci :
Mais cela ne m'affiche rien dans mon onPostExecute qui ressemble à ceci maintenant :
Une idée ?
Le code arrive à se connecter mais le code php ne reçoit pas mes valeurs.
pour le teste mon code php ressemble à ceci :
<?php echo $_POST["mdp"]; ?>
Mais cela ne m'affiche rien dans mon onPostExecute qui ressemble à ceci maintenant :
@Override protected void onPostExecute(String result) { super.onPostExecute(result); Toast.makeText(ctx,result,Toast.LENGTH_SHORT).show(); }
Une idée ?
Hum...je ne fonctionne pas comme cela...
Je fais plutôt un truc du genre pour passer du contenu POST
Je fais plutôt un truc du genre pour passer du contenu POST
List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); postParameters.add(new BasicNameValuePair("user", user)); postParameters.add(new BasicNameValuePair("mdp", mdp)); httppost.setEntity(new UrlEncodedFormEntity(postParameters));
J'ai pas mal vue de NameValuePair, le problème avec ceci est qu'il faudrait apparemment utiliser une Librairie et qu'elle est fortement déconseillé par android (ainsi que tous les forums que j'ai pu voir) car obsolète et générant trop de problèmes
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ah oui, c'est vrai.
Du coup, j'ai trouvé ça:
@+
Buno, Modo CS-CCM
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...
Du coup, j'ai trouvé ça:
Uri.Builder builder = new Uri.Builder() .appendQueryParameter("user", user) .appendQueryParameter("mdp", mdp); String query = builder.build().getEncodedQuery(); OutputStream os = httpUrlConnection.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); writer.write(query); writer.flush(); writer.close(); os.close();
@+
Buno, Modo CS-CCM
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...