entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

PHP Webservice + JSON + iOS+MySQL

Buenas tardes a todos,

Tengo un pequeño problema. Actualmente dispongo de una aplicacion en Android la cual tiene 4 pantallas y dichas pantallas se cargan desde una base de datos en MySQL y tienen acceso a modificar esa base de datos. El sistema esta montado con un webservice el cual se encarga de hacer las consultas a la base de datos usando if, es decir, si desde el JSON le paso como parámetro method el method "delete" elimina el registro y si le paso "list" me lista los registros. Todo me funciona perfectamente pero ahora tengo que hacer la misma aplicación para iOS y no encuentro ningún sitio donde te explique como hacerlo. Si que te explican como hacerlo si al llamar directamente a la URL te devuelve el valor, pero no ha hacer consultas.

Un ejemplo del código que hago servir para eliminar un registro es el siguiente:
En la clase de Java:

public class ServerAccess {

public static String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        Log.e("PHP Client", "Error : " + e.getMessage());
    } finally {
        try {
            is.close();
        } catch (IOException e1) {
            Log.e("PHP Client", "Error : " + e1.getMessage());
        }
    }
    return sb.toString();
}

public Object getResponseObject(ArrayList Parameters, Class c) {

    try {

        HttpClient httpclient = new DefaultHttpClient();

        HttpPost httppost = new HttpPost(Constants.SERVICE_URL);

        httppost.setEntity(new UrlEncodedFormEntity(Parameters));

        HttpResponse response = httpclient.execute(httppost);

        HttpEntity entity = response.getEntity();

        InputStream stream = entity.getContent();

        String result = convertStreamToString(stream);

        Gson gson = new Gson();

        Object responseObject = gson.fromJson(result, c);

        return responseObject;
    } catch (Exception e) {
        Log.e("PHP Client", "Error in http connection" + e.toString());
        return null;
    }
}
public void setEliminarReserva(String code) {
    ArrayList parameters = new ArrayList();
    parameters.add(new BasicNameValuePair("method", "setEliminarReserva"));
    parameters.add(new BasicNameValuePair("code", code));
    setData(parameters);
}

Y en el fichero .php:

 if($Request_Method=="setEliminarReserva")

 {

$code=$_REQUEST['code'];
$query = "DELETE FROM `u738720968_p01`.`booking` WHERE `booking`.`code`='$code'" or die(mysql_error());
if ($query) {
        echo "Datos borrados correctamente";
    } else {
        echo "Error al borrar los datos";
    }

$result = mysql_query($query);

while($row = mysql_fetch_assoc($result))
{
    $resultArray[] = $row;
}

echo json_encode($resultArray);
 }

Lo que necesitaría es saber desde 0 como programar el parser desde iOS.

Muchas gracias por adelantado

2 Respuestas

2votos

juancruzmdq Puntos1500

Como estas Victor?
Te puedo recomendar que veas este framework, te va a simplificar mucho la vida
http://afnetworking.com/
En la documentación vas a encontrar muchos ejemplos.

Tambien te puede ser util https://github.com/johnezang/JSONKit para trabajar con JSON.

Suerte

0voto

victor_capilla comentado

No llega ni a ejecutarme esa linea, me devuelve directamente este error en el log

The operation couldn’t be completed. (Cocoa error 3840.)JSON text did
not start with array or object and option to allow fragments not set.

Lo que he encontrado por Google son porque no han puesto bien los datos dentro del JSON, no he encontrado ninguno que diga que esta vacío y como controlarlo.

0voto

juancruzmdq comentado

la API no esta respondiendo con un JSON valido.

proba de setear esta opcion en la operacion antes de ejecutarla

operation.JSONReadingOptions = NSJSONReadingAllowFragments;
[operation start];

esto va a permitir que acepte la respuesta de la api aunque no sea ni un array ni un diccionario valido.
volve a loguear JSON para ver que te devuelve la API

0voto

juancruzmdq comentado

perdon, no es que no recibe un JSON valido, es que no recibe ni un array ni un diccionario json valido

0voto

Peter comentado

Por favor crea una pregunta nueva. Es relacionada, pero no es lo mismo.

0voto

victor_capilla comentado

Perfecto, allá voy!

1voto

juancruzmdq Puntos1500

Enviar GET/POST con parametros

//Aca hay un post con un ejemplo simple
http://samwize.com/2012/10/25/simple-get-post-afnetworking/

//fijate que en el ejemplo del POST setea este encoding para los parametros que envía

[httpClient setParameterEncoding:AFJSONParameterEncoding];

// Con esto podes crear un diccionario con el string del JSON que te devuelve la llamada (usa JSONKIT)

-(NSDictionary *)dictionaryFromJson:(NSString *) JSONString
{
JSONDecoder * decoder = [[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone];
return [decoder mutableObjectWithData:[JSONString JSONData]];
}

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta