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  
Viejo 19/08/16, 14:49:59
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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?
Responder Con Cita
  #3  
Viejo 19/08/16, 15:25:37
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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
Responder Con Cita
  #5  
Viejo 19/08/16, 21:27:16
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Pues entonces es null algo de la línea 39 de tu clase JsonParserGeneral, mira a ver qué haces en esa línea.
Responder Con Cita
  #7  
Viejo 19/08/16, 23:26:05
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 20/08/16, 10:44:10
Avatar de Joakin60
Joakin60 Joakin60 no está en línea
Miembro del foro
Mensajes: 64
 
Fecha de registro: oct 2015
Mensajes: 64
Tu operador: Movistar
Mencionado: 3 comentarios
Tagged: 0 hilos
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
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
  #11  
Viejo 21/08/16, 10:58:26
Avatar de Dexafree
Dexafree Dexafree no está en línea
Mr. FAQMan
Mensajes: 8,021
Compra y venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Versión de ROM: Android 4.1.1 Jelly Bean
Versión de Radio: KF1
Tu operador: Movistar
Mencionado: 65 comentarios
Tagged: 2 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 01:47:00 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007