Hola a todos, estuve realizando un tutorial de conexion con base de datos desde una aplicación android con HttpURLConnection donde todo me resulto bien, tengo las funciones basicas de una BD corriendo bien (SELECT,INSERT,UPDATE), encontré que con la libreria Volley todo era mas sencillo y ahora estoy migrando el codigo guiandome de la documentación oficial.
Los metodos GET me funcionan perfecto, he tenido problemas solo con los POST y es donde quisiera que por favor me ayudaran, aqui va el codigo.
Usando el http:
case "3"://insertar
try {
HttpURLConnection urlConn;
DataOutputStream printout;
DataInputStream input;
miurl = new URL(cadena);
urlConn = (HttpURLConnection) miurl.openConnection();
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setUseCaches(false);
urlConn.setRequestProperty("Content-Type", "application/json");
urlConn.setRequestProperty("Accept", "application/json");
urlConn.connect();
JSONObject jsonParam = new JSONObject();
jsonParam.put("nombre", params[2]);
jsonParam.put("direccion",params[3]);
OutputStream os = urlConn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(jsonParam.toString());
writer.flush();
writer.close();
int respuesta = urlConn.getResponseCode();
StringBuilder result = new StringBuilder();
if (respuesta == HttpURLConnection.HTTP_OK) {
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
while ((line=br.readLine()) != null) {
result.append(line);
//response+=line;
}
JSONObject respuestaJSON = new JSONObject(result.toString());
String resultJSON = respuestaJSON.getString("estado");
if (resultJSON == "1") {
devuelve = "User insertado correctamente";
} else if (resultJSON == "2") {
devuelve = "No se puede insertar";
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return devuelve;
Y tratando de usar el Volley este es el codigo:
case R.id.btn_insertar:
url = INSERT;
JsonObjectRequest postRequest = new JsonObjectRequest
(Request.Method.POST, url,(String) null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
tv_respuesta.setText(response.toString());
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// tv_respuesta.setText("That didn't work!");
tv_respuesta.setText(error.toString());
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
headers.put("Accept", "application/json");
return headers;
}
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("user","hola1");
params.put("direccion", "hola2");
return params;
}
};
queue.add(postRequest);
break;
El error que estoy obteniendo viene del "onErrorResponse" y es este:
- com.android.volley.ParseError.org.json.JSONException: value <br of type java.lang.string cannot be converted to jsonobject
En lo que he investigado quiere decir que no puede traducir la respuesta que estoy mandando desde el servicio web al json en el android, a lo que no le encuentro mucho sentido pues el servicio funciona muy bien con el http, de cualquier forma este es el codigo php:
public static function insert(
$nombre,
$direccion
)
{
// Sentencia INSERT
$comando = "INSERT INTO users ( " .
"nombre," .
" direccion)" .
" VALUES( ?,?)";
// Preparar la sentencia
$sentencia = Database::getInstance()->getDb()->prepare($comando);
return $sentencia->execute(
array(
$nombre,
$direccion
)
);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Decodificando formato Json
$body = json_decode(file_get_contents("php://input"), true);
// Insertar user
$retorno = users::insert(
$body['nombre'],
$body['direccion']);
if ($retorno) {
$json_string = json_encode(array("estado" => 1,"mensaje" => "Creacion correcta"));
echo $json_string;
} else {
$json_string = json_encode(array("estado" => 2,"mensaje" => "No se creo el registro"));
echo $json_string;
}
}
Intenté borrando el "echo $json_string;" pero obtengo el mismo error, quizas el error sea muy sencillo pero he podido dar con el, agradeceria mucho si me pudiesen ayudar, gracias!