Je travail actuellement sur la mise en place d'une base de donnée externe pour mon application android. Mais voila, cela fait 2 tutoriels que j'essais, et a chaque fois qu'il s'agit de réaliser des opérations sur la base de donnée, l'application plante en disant "... s'est arrêté".
J'ai certaines fonctions qui sont barré avec la mention "depreciated" lorsque je passe la souris deçu, semblant vouloir dire qu'ils ne sont plus d'actualité ? Je ne sais pas si c'est la source du problème. DefaultHttpClient(), HttpGet, DefaultHttpClient ou encore NameValuePair sont barré.
Je travail en localhost.
Je ne sais vraiment pas d'où vient le problème et si je dois remplacer toute ces fonctions je ne saurais vraiment pas comment m'y prendre.
Donc voilà si quelqu'un a une solution ou aurait un tutoriel fiable je suis preneur.
Ps : je suis sur Android studio et je débute. Je cherche un moyen pour chercher mes erreurs et je ne comprend toujours pas comment on utilise le Logcat après mes multiple recherche, il y a 1000 message que je ne comprend pas même en utilisant la liste déroulante. Quelque chose m'échappe ?
Quand ton application plante, elle génère une stacktrace dans le logcat. Pour filtrer, tu peux régler le log level à "warn" et sélectionner uniquement ton application.
Sans le logcat et donc la stacktrace, impossible de t'aider.
08-10 18:47:46.599 7127-7386/five.androidfive W/System.err﹕ org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused
08-10 18:47:46.620 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:188)
08-10 18:47:46.620 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
08-10 18:47:46.620 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
08-10 18:47:46.621 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
08-10 18:47:46.621 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
08-10 18:47:46.621 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
08-10 18:47:46.621 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at five.androidfive.JSONParser.makeHttpRequest(JSONParser.java:65)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at five.androidfive.AllproductsActivity$LoadAllProducts.doInBackground(AllproductsActivity.java:127)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at five.androidfive.AllproductsActivity$LoadAllProducts.doInBackground(AllproductsActivity.java:105)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:292)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
08-10 18:47:46.622 7127-7386/five.androidfive W/System.err﹕ Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused)
08-10 18:47:46.628 7127-7386/five.androidfive W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:124)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at java.net.Socket.connect(Socket.java:882)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:124)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:149)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ ... 15 more
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at libcore.io.Posix.connect(Native Method)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
08-10 18:47:46.629 7127-7386/five.androidfive W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:122)
08-10 18:47:46.630 7127-7386/five.androidfive W/System.err﹕ ... 20 more
08-10 18:47:46.630 7127-7386/five.androidfive E/Buffer Error﹕ Error converting result java.lang.NullPointerException: lock == null
08-10 18:47:46.646 7127-7386/five.androidfive E/JSON Parser﹕ Error parsing data org.json.JSONException: End of input at character 0 of
08-10 18:47:46.649 7127-7386/five.androidfive E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: five.androidfive, PID: 7127
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
at five.androidfive.AllproductsActivity$LoadAllProducts.doInBackground(AllproductsActivity.java:130)
at five.androidfive.AllproductsActivity$LoadAllProducts.doInBackground(AllproductsActivity.java:105)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
08-10 18:47:46.676 7127-7137/five.androidfive W/art﹕ Suspending all threads took: 8.271ms
08-10 18:47:47.673 7127-7137/five.androidfive W/art﹕ Suspending all threads took: 7.691ms
08-10 18:47:47.842 7127-7127/five.androidfive E/WindowManager﹕ android.view.WindowLeaked: Activity five.androidfive.AllproductsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{666ad89 V.E..... R......D 0,0-729,232} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:298)
at five.androidfive.AllproductsActivity$LoadAllProducts.onPreExecute(AllproductsActivity.java:117)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591)
at android.os.AsyncTask.execute(AsyncTask.java:539)
at five.androidfive.AllproductsActivity.onCreate(AllproductsActivity.java:57)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
En mode debbugage par contre le logcat est très très long, je ne sais pas si sa se fait de le copie colle.
Le problème c'est que le téléphone ne sait pas ce qu'est localhost... Pour s'en convaincre, il suffit de saisir "localhost" dans la barre d'adresse du navigateur du téléphone. Si tu n'arrives pas à afficher ce que tu veux par ce moyen, ton application ne s'en sortira pas mieux
Seulement j'essai depuis tout a l'heure d'accéder à localhost depuis mon telephone mais j'ai l'erreur ERR_ADDRESS_UNREACHABLE.
J'ai récupérer l'ip de mon pc, avec lequel je peux accéder à localhost, mais sa ne marche ni sur mon téléphone, ni sur un autre PC que j'ai chez moi. (la même origine ?).
J'ai ouvert le fichier httpd.config et je ne trouve pas la ligne décrit dans les tutos, à savoir (allow from 127...). Elle semble avoir été remplacé par
AllowOverride none
Require all denied
J'ai remplacé denied par granted, et sa ne change toujours rien.
J'ai également tenter de rajouter ":80" apres l'adresse ip.
Je ne suis malheureusement pas expert de wamp et je ne sais pas spécialement comment on peut ouvrir l'accès localhost à d'autres machines. Peut-être auras-tu plus de chances dans le forum php ?
J'ai enfin pu me connecter à wamp à partir de mon telephone, en remplaçant localhost par mon adresse ip et en ouvrant le port 80 si jamais certains ont eut le même problème.
Cependant, l'application crash toujours avec ("nom_de_lapp s'est arrêté") des que j'essai d'accéder à la page View products.
Je met le nouveau logcat :
08-12 08:20:19.554 3886-4245/five.androidfive E/JSON Parser﹕ Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
--------- beginning of crash
08-12 08:20:19.560 3886-4245/five.androidfive E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: five.androidfive, PID: 3886
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
at five.androidfive.AllproductsActivity$LoadAllProducts.doInBackground(AllproductsActivity.java:130)
at five.androidfive.AllproductsActivity$LoadAllProducts.doInBackground(AllproductsActivity.java:105)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
08-12 08:20:19.936 3886-3886/five.androidfive E/WindowManager﹕ android.view.WindowLeaked: Activity five.androidfive.AllproductsActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{365dca1d V.E..... R......D 0,0-729,232} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:298)
at five.androidfive.AllproductsActivity$LoadAllProducts.onPreExecute(AllproductsActivity.java:117)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591)
at android.os.AsyncTask.execute(AsyncTask.java:539)
at five.androidfive.AllproductsActivity.onCreate(AllproductsActivity.java:57)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Si je comprend bien, l'objet JSON est null, et ne recupère donc pas les données.
Par rapport à l'autre tuto, je vois que la requête d'ajout s'effectue dans la base de données avec des nouvelles lignes insérés, mais il est également impossible d'avoir les données JSON qui indique le succès de l'opération.
Il y a donc un problème avec la récupération des données JSON mais la requête sql s'exécute belle et bien. Cette méthode est-elle devenu obsolète ou bien il y a une erreur quelque part qui empêche de récuperer les données JSON ?
Ton JSONObject est null car visiblement il n'arrive pas à transformer la réponse de ton web-service en JSON. Ca semble être du HTML et non du JSON car tu as quelque chose comme Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject.
Quand tu appelles le web-service directement dans ton navigateur, qu'est-ce qui est affiché à l'écran ?
La solution était d'utiliser la classe PDO pour les opérations sur la base de donnée.
En effet quand je recupérais les données avec le web service, j'avais bien mon tableau contenant les données mais il y avait egalement du langage XML récupéré avec je ne sais pas pourquoi, je ne pensais pas que ce code allait être récupéré lorsque l'objet JSON allait être crée. En utilisant la classe PDO j'ai seulement mon tableau contenant les données. De plus quand j'appelais la page depuis mon navigateur, les données étaient récupéré mais ils me disait que les methodes sql employé etaient "depreciated". Donc surement que le code XML récupéré par le web service c'était la mise en page de ce message.
En tout cas merci beaucoup rolandl tu m'a bien aidé
La solution était d'utiliser la classe PDO pour les opérations sur la base de donnée.
En effet quand je recupérais les données avec le web service, j'avais bien mon tableau contenant les données mais il y avait egalement du langage XML récupéré avec je ne sais pas pourquoi, je ne pensais pas que ce code allait être récupéré lorsque l'objet JSON allait être crée. En utilisant la classe PDO j'ai seulement mon tableau contenant les données. De plus quand j'appelais la page depuis mon navigateur, les données étaient récupéré mais ils me disait que les methodes sql employé etaient "depreciated". Donc surement que le code XML récupéré par le web service c'était la mise en page de ce message.
En tout cas merci beaucoup rolandl tu m'a bien aidé
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog