PASO 1: Creando nuestra base de datos
Para este ejercicio utilizare el gestor de base de datos pgAdminIII mi BD se llamara BD_persona y tendremos una tabla llamada persona con cuatro columnas.
CREATE TABLE persona ( id_persona serial NOT NULL, nombre character varying(120) NOT NULL, direccion character varying(90) NOT NULL, edad integer NOT NULL, CONSTRAINT id_persona_pkey PRIMARY KEY (id_persona) )
PASO 2: Creando la WebService
En mi caso sera un servidor php local con xampp.
Para este ejercicio tendremos dos archivos conexion.php y registrar.php
conexion.php
<?php //variables para la coneccion $host= "localhost"; $port= "5432"; $user= "postgres"; $database="BD_persona"; $password ="12345"; $conexion=pg_connect("host=$host port=$port user=$user dbname=$database password=$password"); //si fallara la conexion con la BD if (!$conexion) { echo "error en la conexion"; }else{ //echo 'conexion correctamente'; } ?>
registrar.php
<?php // incluimos la conexion include 'conexion.php'; $nombre = $_POST['nombre']; $direccion = $_POST['direccion']; $edad = $_POST['edad']; //insertamos datos a los campos de nuestra tabla $query = "insert into persona(nombre,direccion,edad) values ('$nombre','$direccion','$edad')"; if(pg_query($conexion, $query)){ echo 'Datos enviados con éxito'; } else{ echo 'Inténtalo de nuevo'; } pg_close($conexion); ?>
PASO 3: Creando la APP
Tenemos que crear 3 editText los cuales ingresaremos el nombre, dirección y la edad de la persona y debería verse como la siguiente imagen
Te dejo en activity_main.xml en modo texto.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.androfast.pc.appregistrarpostgresqlandroid.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:gravity="center" android:text="Enviar datos al servidor" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/edtNombre" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/textView" android:layout_marginTop="28dp" android:ems="10" android:gravity="center" android:hint="@string/ingresa_nombre" android:inputType="textPersonName" /> <EditText android:id="@+id/edtDireccion" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/edtNombre" android:layout_marginTop="28dp" android:ems="10" android:gravity="center" android:hint="Ingresa Direccion" android:inputType="textPersonName" /> <EditText android:id="@+id/edtEdad" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/edtDireccion" android:layout_marginTop="28dp" android:ems="10" android:gravity="center" android:hint="Ingresa Edad" android:inputType="number" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/edtEdad" android:layout_centerHorizontal="true" android:layout_marginTop="38dp" android:text="Enviar datos " /> </RelativeLayout>
Ahora debemos ir a nuestro buil.gradle y agregar la siguiente linea:
useLibrary‘org.apache.http.legacy’
Debemos agregarlo dentro de las llaves de android como se muestra en la siguiente imagen:
Ahora debemos ir a nuestro AndroidManifest y agregar el siguiente permiso
<uses-permission android:name=«android.permission.INTERNET»/>
Ahora debemos trabajar con nuestro MainActivity.java
import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; 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 java.io.IOException; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { String ServerURL = "http://localhost/postgresql/registrar.php" ; EditText nombre,direcion,edad; Button button; String TempNombre,TempDireccion; int TempEdad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); nombre = (EditText)findViewById(R.id.edtNombre); direcion = (EditText)findViewById(R.id.edtDireccion); edad = (EditText)findViewById(R.id.edtEdad); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { ObtenerDatos(); InsertaDatos(TempNombre, TempDireccion,TempEdad); } }); } public void ObtenerDatos(){ TempNombre = nombre.getText().toString(); TempDireccion = direcion.getText().toString(); TempEdad= Integer.parseInt(edad.getText().toString()); } public void InsertaDatos(final String nombre, final String direccion, final int edad){ class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { String NombreHolder = nombre ; String DireccionHolder= direccion; int EdadHolder = edad ; List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("nombre", NombreHolder)); nameValuePairs.add(new BasicNameValuePair("direccion", DireccionHolder)); nameValuePairs.add(new BasicNameValuePair("edad", Integer.toString(EdadHolder))); try { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(ServerURL); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); } catch (ClientProtocolException e) { } catch (IOException e) { } return "Datos insertados con éxito"; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Toast.makeText(MainActivity.this, "Datos enviados con éxito", Toast.LENGTH_LONG).show(); } } SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); sendPostReqAsyncTask.execute(nombre,direccion, String.valueOf(edad)); } }
Debemos editar con la dirección de nuestra ws
String ServerURL = "http://localhost/postgresql/registrar.php" ;
En esta sección del código es donde extraemos los datos de nuestra WS. Si observan bien verán que los nombres entre comillas dobles hacen referencia a los atributos de nuestra tabla persona, de esa forma si están mal escritas no llamaran ningún dato.
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("nombre", NombreHolder)); nameValuePairs.add(new BasicNameValuePair("direccion", DireccionHolder)); nameValuePairs.add(new BasicNameValuePair("edad", Integer.toString(EdadHolder)));
También en este trozo de código estamos llamando por medio de nuestro botón a los métodos que se encargaran de obtener e insertar los datos de nuestra app.
button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { ObtenerDatos(); InsertaDatos(TempNombre, TempDireccion,TempEdad); } });
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
List nameValuePairs = new ArrayList();
nameValuePairs.add(new BasicNameValuePair(«nombre», NombreHolder));
nameValuePairs.add(new BasicNameValuePair(«direccion», DireccionHolder));
nameValuePairs.add(new BasicNameValuePair(«edad», Integer.toString(EdadHolder)));
Hola como estas una pregunta es que no entiendo este fragmento de codigo y queria saber si me lo puede explicar