Volley和Gson - 使用JSONObjectRequest

时间:2015-05-28 03:04:26

标签: android post request gson android-volley

我是新来的,我不会说英语,但我会尽力解释。 我对Post请求有一些问题。这是我的代码:

private void makeRequest() {
    String url = "http://diegocardenas.netau.net/comprobar_usuario.php";


    JsonObjectRequest request1=new JsonObjectRequest(Method.POST, url, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            onConnectionFinished();
            Usuario usuario = new Gson().fromJson(response.toString(), Usuario.class);
            if (usuario != null) {
                Log.i("App1", "Nombre:" + usuario.getNombre() + " Correo: " + usuario.getCorreo());
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            onConnectionFailed(error.toString());
            Log.i("App1", error.getMessage());
        }
    }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> params=new HashMap<>();
            params.put("correo","daniel@gmail.com");
            params.put("clave","daniel");
            return params;
        }
    };
    addToQueue(request1);
}

这是Usuario课程:

public class Usuario {
    private int cod_usuario, contador, estado;
    private String nombre, correo;

    public Usuario() {
    }

    public int getCod_usuario() {
        return cod_usuario;
    }

    public void setCod_usuario(int cod_usuario) {
        this.cod_usuario = cod_usuario;
    }

    public int getContador() {
        return contador;
    }

    public void setContador(int contador) {
        this.contador = contador;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }
}

和我的PHP ...抱歉,但我是PHP的初学者

comprobar_usuario.php

<?php
header('Content-Type: text/html; charset=UTF-8');
include_once('usuario.class.php');
$usuario=new Usuario();
$correo=$_POST['correo'];
$clave=$_POST['clave'];
echo json_encode($usuario->getJSONUsuario($correo,$clave));
?>

usuario.class.php

<?php
include_once('database.class.php');
class Usuario{
public function getJSONUsuario($correo,$clave){
        $json= array();
        $result=$this->comprobarUsuario($correo,$clave);
        if(mysql_num_rows($result)){
            while ($row=mysql_fetch_row($result)) {
                $json[]=array('nombre'=>$row[1], 'correo'=>$row[2],
                    'contador'=>$row[5]);
            }
        }
        return $json;
}
    private function comprobarUsuario($correo, $clave){
        $consulta="SELECT * FROM usuario WHERE correo='".$correo."' 
            AND clave='".$clave."'";
        $db=new Database();
        return $db->ejecutarConsulta($consulta);
    }
}
?>

database.class.php

<?php
include_once('datos_conexion.class.php');

class Database{

    public function ejecutarConsulta($consulta){
        $conexion=mysql_connect(DatosConexion::getServidor(), DatosConexion::getUsuarioConexion(),
            DatosConexion::getClaveConexion());
        mysql_set_charset('utf8',$conexion);
        if(!$conexion){
            die('No se pudo conectar al servidor: '.mysql_error());
        }else{
            mysql_select_db(DatosConexion::getDataBase(),$conexion);
            $resultado=mysql_query($consulta);
            mysql_close();
            return $resultado;
        }
    }
}
?>
表:Usuario 字段:cod_usuario Int,nombre Varchar,correo Varchar,clave Varchar,estado Boolean,contador Int

EDITED 日志:

05-28 09:52:02.921 10862-11210/com.diego.app1I/qtaguid﹕ Failed write_ctrl(u 67) res=-1 errno=22 
05-28 09:52:02.921 10862-11210/com.diego.app1I/qtaguid﹕ Untagging socket 67 failed errno=-22 
05-28 09:52:02.921 10862-11210/com.diego.app1W/NetworkManagementSocketTagger﹕ untagSocket(67) failed with errno -22 
05-28 09:52:02.921 10862-10862/com.diego.app1 I/App1﹕ org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject

我使用GET证明连接并且我返回了数据,但是当使用POST失败时所有xD 我认为问题是方法getparams ...

请帮助!!!!

1 个答案:

答案 0 :(得分:0)

如果您认为问题出在getParams上,那么使用Volley您不必使用getParams,它知道如何处理JSONObject以便您可以使用:

  String someurl = URL;

    Map<String, Object> jsonParams = new HashMap<>();
    jsonParams.put("someparam", getSomeParam());

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, someurl, new JSONObject(jsonParams),
            new Response.Listener<JSONObject>()
            {
                @Override
                public void onResponse(JSONObject response)
                {
                    Log.d(TAG + ": ", "Response: " + response.toString());
                    //do other stuff 
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error)
                {
                    if (null != error.networkResponse)
                    {
                        Log.d(TAG + ": ", "Error Response code: " + error.networkResponse.statusCode);
                    }
                }
            });

    requestQueue.add(request);

另外 - 确保Usuario类中的变量名与您在Json中返回的名称相匹配,如果它与Usuario中的变量不匹配,则默认为NULL。