Android + PHP + MySQL

FuckYeah

Bueno, después de 2 días dándole duro, he entendido parte del parseo y tal.

Veamos, he resuelto los problemas de mi programa y va de puta madre hasta que toca parsear el String siguiente:

{
"nombre_usuario":"adri",
"id":"55",
"password":"axri"
}

La UsuarioJSON.class:

public class UsuarioJSON {
    int id;
    String nombre_usuario;
    String password;
}

Y la línea que me da ERROR (comentándola va bien la app):

    protected void onPostExecute(String result){
        UsuarioJSON u = new Gson().fromJson(result, UsuarioJSON.class);
        this.respuestaid.setText(u.id);
    }

He googleado y he seguido tutoriales y de todo, no encuentro el error, en el cat log dice que falla esa línea y ya está.
Aquí os pongo el error:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Conecta.onPostExecute(Conecta.java:70)

Hay que decir que sí conecta y sí recupera el JSON, porque yo comento la línea UsuarioJSON u = new Gson().fromJson(result, UsuarioJSON.class); y le pongo directamente a this.respuestaid.setText(result); y me saca en la pantalla de android todo el JSON.

Una parte de mi código que no entiendo.. es la siguiente:

duda
2 respuestas
RaymaN

#31 no controlo de Android, pero quizá es porque declaras id como int y en el json es un string (por estar entrecomillado).

Si el json lo generas desde php, hazlo así: json_encode($data, JSON_NUMERIC_CHECK)

1 1 respuesta
FuckYeah

#32 Era eso, dios te quiero.

Muchas gracias a todos, de verdad. Sin los ánimos ni la ayuda estaría ya viciando a algo en vez de hacer algo productivo. Bendito GSON joder, que fácil es usarlo.

Daredevil

#31 Esa parte de código simplemente es un buffer de entrada, es totalmente equivalente al otro código que ves en esos tutoriales con la única salvedad que el primero sirve de puente para convertir bytes a chars y el segundo no.

1 1 respuesta
FuckYeah

#34 aah por eso con el segundo método me daba error? Porque parseaba binario? Flipa.

JuAn4k4

Por cierto, httpclient3 ya no tiene soporte, pero el 4 si.

En cuanto a Android, para consumir REST:

http://loopj.com/android-async-http/

Y spring rest-template:

http://docs.spring.io/spring-android/docs/current/reference/html/rest-template.html

Evita Reflection, en android no te irá muy templado, a no ser que sea poco.

1
Tig

Como dice #20, usad Retrofit y dejaos de cosas raras. Yo personalmente uso Robospice + Retrofit.

1 respuesta
Hexar

#37 Que ves de malo en Volley? Su uso de la caché le ayudaría a ahorrar peticiones si es capaz de sincronizar bien los datos ( SyncAdapter on duty ) para trabajar con una base de datos

1 respuesta
Tig

#38 Cuando tuve que decidir, la documentación de Volley era muy escasa, lo que me echó para atrás. Además, Retrofit te da el parseo de Json automático, lo que es una maravilla. De todas formas Retrofit en sí mismo no se puede usar solo, hace las peticiones pero no se preocupa del hilo de ejecución, de ahí que haya que combinarlo con OkHttp u otra librería tipo Robospice o Ion.

2 respuestas
Hexar

#39 La verdad es que la documentación es un punto muy a favor ,ya le he estado echando un ojo y Volley tampoco es que posea la misma documentación ni de lejos, la probaré la próxima vez gracias :)

N

No me he leído el tochaco porque estoy vago pero para esto no está... http://hibernate.org/?

Querosvan

#39 a qué te refieres que no se preocupa del hilo de ejecución? se le pueden hacer llamadas con callback y funciona de lujo en los ejemplos que he probado. pensaba usarlo en nuevos proyectos, por eso me interesa esa opinión tuya jaja

1 respuesta
Tig

#42 Tienes razón, además lo miré el otro día porque al rato de escribirlo me entró la duda pero luego me dio pereza actualizar aquí.

No sé si cuando lo miré por primera vez no existía, pero en cualquier caso a mí me interesaba meter otra capa que ejecutara las requests e hiciera más cosas.

hit69

Puedes hacer un webservice usando gradle con framework spring, aqui lo tienes muy bien explicado: https://spring.io/guides/gs/rest-service/

Y aqui para consumir los datos con el cliente Android:
https://spring.io/guides/gs/consuming-rest-android/