|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Se cierra la aplicación después de ejecutar AsyncTask
Estoy realizando una prueba de actualizar campos en una base de datos, pero al ejecutar la AsyncTask en la aplicación me cierra esta después de actualizar los campos de la base de datos, y no se me ocurre a que puede deberse. Aquí dejo el código por si alguien puede ayudarme.
class ArteActualizarRating extends AsyncTask<String, String, String> { @override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(MainActivity.this); pDialog.setMessage("Espere por favor ..."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } protected String doInBackground(String... args) { pidArte ="107-75-1"; nvotosFin="5"; valoracionFin="10"; // Building Parameters HashMap<String, String> params = new HashMap<String, String>(); params.put(TAG_PID, pidArte); params.put(TAG_NVOTOS_FIN, nvotosFin); params.put(TAG_VALORACION_FIN, valoracionFin); JSONObject json = jsonParser.makeHttpRequest(url_arte, "POST", params); try { int success = json.getInt(TAG_SUCCESS); if (success == 1) { // successfully updated Intent i = getIntent(); // send result code 100 to notify about product update setResult(100, i); finish(); } else { // failed to update } } catch (JSONException e) { e.printStackTrace(); } return null; } protected void onPostExecute(String par) { pDialog.dismiss(); } } Gracias de antemano por las respuestas. |
|
|
|
#2
|
||||
|
||||
|
Cuando se cierra una app no hay que mirar el código, hay que mirar la excepción en el Logcat.
¿Qué excepción te da?
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#3
|
||||
|
||||
|
Logcat
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299) at java.util.concurrent.FutureTask.finishCompletion(F utureTask.java:352) at java.util.concurrent.FutureTask.setException(Futur eTask.java:219) at java.util.concurrent.FutureTask.run(FutureTask.jav a:239) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTas k.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:838) Caused by: java.lang.NullPointerException at libcore.net.UriCodec.encode(UriCodec.java:132) at java.net.URLEncoder.encode(URLEncoder.java:57) at com.example.variablebd.JSONParserGeneral.makeHttpR equest(JSONParserGeneral.java:39) at com.example.variablebd.MainActivity$ArteActualizar Rating.doInBackground(MainActivity.java:63) at com.example.variablebd.MainActivity$ArteActualizar Rating.doInBackground(MainActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:287) at java.util.concurrent.FutureTask.run(FutureTask.jav a:234) ... 4 more Activity com.example.variablebd.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$Decor View{41458658 V.E..... R......D 0,0-513,144} that was originally added here android.view.WindowLeaked: Activity com.example.variablebd.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$Decor View{41458658 V.E..... R......D 0,0-513,144} that was originally added here at android.view.ViewRootImpl.<init>(ViewRootImpl.java :409) at android.view.WindowManagerGlobal.addView(WindowMan agerGlobal.java:218) at android.view.WindowManagerImpl.addView(WindowManag erImpl.java:69) at android.app.Dialog.show(Dialog.java:281) at com.example.variablebd.MainActivity$ArteActualizar Rating.onPreExecute(MainActivity.java:52) at android.os.AsyncTask.executeOnExecutor(AsyncTask.j ava:586) at android.os.AsyncTask.execute(AsyncTask.java:534) at com.example.variablebd.MainActivity.onCreate(MainA ctivity.java:38) at android.app.Activity.performCreate(Activity.java:5 122) at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1081) at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2270) at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2358) at android.app.ActivityThread.access$600(ActivityThre ad.java:156) at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1340) at android.os.Handler.dispatchMessage(Handler.java:99 ) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.jav a:5297) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:833) at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:600) at dalvik.system.NativeStart.main(Native Method) |
|
#4
|
||||
|
||||
|
Caused by: java.lang.NullPointerException
at libcore.net.UriCodec.encode(UriCodec.java:132) at java.net.URLEncoder.encode(URLEncoder.java:57) at com.example.variablebd.JSONParserGeneral.makeHttpR equest(JSONParserGeneral.java:39) at com.example.variablebd.MainActivity$ArteActualizar Rating.doInBackground(MainActivity.java:63) ![]()
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#5
|
||||
|
||||
|
La url no puede ser null
No, la url no puede ser null puesto que los campos nvotos y valoración de la tabla correspondiente a los String nvotosFin y valoracionFin los actualiza conforme a su pidArte.
Lo que pasa es que ejecuta la aplicación, actualiza los datos y luego el problema, se cierra. He estado y sigo dándole vueltas a ver si el AsyncTask está mal construido, pero no veo en qué, tampoco tiene tanto. |
|
#6
|
||||
|
||||
|
Pues entonces es null algo de la línea 39 de tu clase JsonParserGeneral, mira a ver qué haces en esa línea.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#7
|
||||
|
||||
|
JSONParser
El JSONParser que estoy utilizando es el que se puede encontrar en cualquier sitio de internet, de echo lo estoy utilizando en otros sitios para seleccionar y mostrar campos de la base de datos y funciona bien.
La línea a que te refieres es: sbParams.append(key).append("=") .append(URLEncoder.encode(params.get(key), charset)); Y está dentro del contexto: sbParams = new StringBuilder(); int i = 0; for (String key : params.keySet()) { try { if (i != 0){ sbParams.append("&"); } sbParams.append(key).append("=") .append(URLEncoder.encode(params.get(key), charset)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } i++; } No entiendo bien este código, por lo que no puedo saber si está bien o no. |
|
#8
|
||||
|
||||
|
Pues el problema lo tienes en el params que le pasas, que hay algo que está mal y al hacer el get de la clave correspondiente devuelve null porque no existe. Lo más seguro es que sean null pidArte, nvotos, valoracion o alguno de esos que has puesto.
Comprueba que estás pasando bien los parámetros que necesite.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
| Gracias de parte de: | ||
|
#9
|
||||
|
||||
|
Error en código AsyncTask para actualizar BD
Al final estaba mal el código de asyntask. Queda así y funciona perfectamente. Muchas gracias de nuevo por tu ayuda.
Sobra el Intent. Y de paso una última pregunta ¿Cómo doy un tema por cerrado? JSONObject json = jsonParser.makeHttpRequest(url_arte, "POST", params); try { int success = json.getInt(TAG_SUCCESS); if (success == 1) { /* Intent i = getIntent(); setResult(100, i); finish();* } else { // failed to update } } catch (JSONException e) { e.printStackTrace(); } |
|
#10
|
||||
|
||||
|
Ya es raro que se solucione una excepción comentando algo que viene después
Pero si funciona bienvenido es jaja.Puedes editar el mensaje, no recuerdo si edición avanzada, y en el desplegable de tipo de hilo elegir Solucionado.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
|
#11
|
||||
|
||||
|
Marcado queda como Solucionado
![]() Para que un usuario marque su propio hilo como solucionado, debe editar el post inicial del hilo, ir a Edición Avanzada, y ahí se puede cambiar la etiqueta
__________________
|
![]() |
Estás aquí
|
||||||
|
||||||