jueves, 23 de febrero de 2012

Hacer post con android en una pagina con php

Intro
Para esta entrada, la intecion fue tratar de hacer la comunicacion entre el arduino y un dispositivo android, pero antes tendria que hacer pruebas de comunicacion de android con el servidor, ya que este seria el intermediario: android-servidor-arduino.
El resultado fue, una aplicacion que mandara un mensaje al servidor y este la interpretara mostrando en una pagina.

Desarrollo
Para el desarrollo de la siguiente aplicacion se utilizaron las siguientes librerias, en las que empleamos para la coneccion de http, el cliente, en la cual el servidor tomara que nosotros estamos haciendo request y la informacion que enviaremos.
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

Tambien emplearemos un codigo en php, que tomara el valor enviado y este lo interpretara.

Codigo
En el codigo puse algunos comentarios que identifican acciones importantes,
Codigo php
$msg=$_POST["mensaje"];//Recibimos el mensaje

$archivo="mensajePOSTandroid.html"; //Damos el nombre del archivo donde se guardaran los mensajes

file_put_contents($archivo, $msg."
");//colocamos el mensaje recibido al archivo

$androidmsg=file_get_contents($archivo);//Cargamos el contenido

echo $androidmsg; //Imprimimos lo contenido en androidmsg
?>


post.java
package ab.Post.namespace;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class PostActivity extends Activity {
    Button sendButton;
    EditText msgText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        // Declaramos las id
        msgText = (EditText) findViewById(R.id.msg);
        sendButton = (Button) findViewById(R.id.sendT);
    }
    public void send(View v)
    {
        // Tomamos el mensaje a enviar
        String msg = msgText.getText().toString();  

        // Declaramos que el mensaje a enviar no este vacio, de lo contrario no mandamos nada
        if (msg.length()>0)
        {
        HttpClient httpclient = new DefaultHttpClient(); //Objeto Cliente
         HttpPost httppost = new HttpPost("http://abimage.comli.com/android/post.php");//Direccion a donde la enviaremos
      try {
        List nameValuePairs = new ArrayList(2);PArametros que enviaremos
        nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
        nameValuePairs.add(new BasicNameValuePair("mensaje", msg));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //Cargamos los valores
        httpclient.execute(httppost);
        msgText.setText(""); // Una vez enviado borramos
      } catch (ClientProtocolException e) {
          // TODO Auto-generated catch block
      } catch (IOException e) {
          // TODO Auto-generated catch block
      }

        }
        else
        {
            Toast.makeText(getBaseContext(),"Pon un comentario",Toast.LENGTH_SHORT).show();
        }

    }
}

main.xml


     

    
    

A continuacion les dejo la aplicacion del programa.

Notas:
Hay que mensionar, al igual que en la entrada del acelerometro, hay que dar permiso en el android manifest.xml de coneccion a internet, ya que sin esto, no mandara nada.
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />

Resultado




Bibliografia
http://www.helloandroid.com/tutorials/connecting-mysql-database
http://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/

1 comentario: