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

Respuesta
 
Herramientas
  #1  
Viejo 19/08/16, 14:49:59
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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.
Responder Con Cita


  #2  
Viejo 19/08/16, 15:15:55
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
  #3  
Viejo 19/08/16, 15:25:37
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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)
Responder Con Cita
  #4  
Viejo 19/08/16, 16:22:00
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

 Cita: Originalmente Escrito por Joakin60 Ver Mensaje
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)
Pues tiene toda la pinta de que la URL que estás pasando (url_arte) es null
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #5  
Viejo 19/08/16, 21:27:16
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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.
Responder Con Cita
  #6  
Viejo 19/08/16, 21:36:58
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
  #7  
Viejo 19/08/16, 23:26:05
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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.
Responder Con Cita
  #8  
Viejo 19/08/16, 23:55:46
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 20/08/16, 10:44:10
Array

[xs_avatar]
Joakin60 Joakin60 no está en línea
Miembro del foro
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar

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();
}
Responder Con Cita
  #10  
Viejo 20/08/16, 10:53:42
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
  #11  
Viejo 21/08/16, 10:58:26
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
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
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 17:48:08 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /