Android: Crear libreta de contactos usando webservice

FedePrado

Bovino maduro
#1
Hola a todos, espero que se encuentren muy bien.

Estoy comenzando con la programación en Android y se me ocurrió la creación de una aplicación de libreta de contactos que muestre información obtenida desde un webservice y en base a perfiles, y que desde la misma aplicación se pueda realizar la llamada.

Es decir:

El total de contactos registrados en la base de datos es de 50.
Pedro de la Mora accede a la aplicación, pero su perfil únicamente le permite visualizar 10 contactos de esos 50.

El diseño de la base de datos ya lo tengo realizado, de igual manera el webservice. Con lo que tengo algo de problema, y que no he logrado avanzar prácticamente nada, es con la visualización de información desde el móvil.

Alguien me podría dar una mano con esto?

Por cierto, se me olvidó comentar que estoy usando Eclipse como EDI.

P:eek: He estado buscando información, pero no he encontrado lo que requiero... Incluso aquí intenté buscar, pero sin éxito :(

Gracias!
 
#2
Hola! viendo tu pregues es muy facil trabajar con ello. he aqui mi metodo
Me dices que el webservice ya funciona por lo que es muy bien avance, lo que no comentas con que trabajas referiendome a la tecnologia, este ejemplo uso JSON.
<br/>br/>
<lu>
<li>Servidor web: Apache</li>
<li>Base de datos: SqlServer</li>
<li>IDE Web: Dreamwaver</li>
<li>IDE Androi: Motodev Studio 4.1</li>
</ul>
<br/><br/>
FUENTE:
Prueba.php

<?php
include "conexion_f.php";
if( $conn )
{
if(isset($_GET["user"]) && isset($_GET["pass"]))
{
$U=$_GET["user"];
$P=$_GET["pass"];
if($U=="" || $P=="")
{
echo "7";
}
else
{
$sql = "select EMPLEADO_DESC from lkp_empleados where USUARIO='".$U."' and CONTRASENIA='".$P."'";
$consulta=sqlsrv_query($conn,$sql);
$json = "";
$i = 0;
$json .= " { \"lkp_empleados\" : [ ";
while( $row = sqlsrv_fetch_array( $consulta, SQLSRV_FETCH_ASSOC) )
{
if($i > 0)
$json .= ",";
$json .= " { \"empleado_desc\" : \"".$row['EMPLEADO_DESC']."\" ";
$json .= "} ";
$i++;
}
$json .= " ] ";
$json .= " } ";
echo $json;
}
}
else
{
echo "8";
}
}
else
{
echo "Conexión no se pudo establecer.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>
<br/><br/>
Sesion.java
package com.crea;

import org.json.JSONException;

import android.app.Activity;
import android.widget.*;
import android.view.*;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.widget.Toast;

public class Sesion extends Activity implements OnClickListener{
public static Sesion sesion;
@Override
protected void onCreate(Bundle savedInstanceState) {
Sesion.sesion=this;
super.onCreate(savedInstanceState);
setContentView(R.layout.acceso);
final Button cmd_iniciar=(Button)findViewById(R.id.cmd_aceptar);
final Button cmd_salir=(Button)findViewById(R.id.cmd_salir);
final Button cmd_acceso=(Button)findViewById(R.id.cmd_acceso);
cmd_iniciar.setOnClickListener(this);
cmd_salir.setOnClickListener(this);
cmd_acceso.setOnClickListener(this);
}
public static boolean verificaConexion(Context ctx) {
boolean bConectado = false;
ConnectivityManager connec = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
// No sólo wifi, también GPRS
NetworkInfo[] redes = connec.getAllNetworkInfo();
// este bucle debería no ser tan ñapa
for (int i = 0; i < 2; i++) {
// ¿Tenemos conexión? ponemos a true
if (redes.getState() == NetworkInfo.State.CONNECTED) {
bConectado = true;
}
}
return bConectado;
}
public void onClick(View v) {
final EditText txt_usuario=(EditText)findViewById(R.id.txt_usuario);
final EditText txt_pass=(EditText)findViewById(R.id.txt_contrasenia);
switch(v.getId())
{
case R.id.cmd_aceptar:
if (!verificaConexion(this)) {
Toast.makeText(getBaseContext(),"Comprueba tu conexión a Internet. Saliendo ... ", Toast.LENGTH_SHORT).show();
this.finish();
}
if(txt_usuario.length()==0 || txt_pass.length()==0)
{
Ver_Dialogo(1,"Tu usuario o contraseña no pueden estar vacios.","Error");
}
else
{
try
{
JSON_Acceso conexion= new JSON_Acceso(sesion);
conexion.readAndParseJSONAcceso(txt_usuario.getText().toString(), txt_pass.getText().toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
case R.id.cmd_salir:
MainActivity.fa.Salir();
finish();
break;
case R.id.cmd_acceso:
//crearAccesoDirectoEnEscritorio("Crea");
addShortcut();
break;
}
}
//********************************
private void Ver_Dialogo(int cual,String msg,String titulo)
{
switch(cual)
{
case 1:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Informacion");
builder.setMessage(msg);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alertdialog=builder.create();
alertdialog.show();
break;
case 2:
Toast.makeText(getApplicationContext(),titulo+" "+msg, Toast.LENGTH_SHORT).show();
break;
}
//************************************
}
/*private void crearAccesoDirectoEnEscritorio(String nombre) {
Intent shortcutIntent = new Intent();
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, getIntentShortcut());
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, nombre);
shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this.getApplicationContext(), R.drawable.ic_launcher));
shortcutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
this.sendBroadcast(shortcutIntent);
}

public Intent getIntentShortcut(){
Intent i = new Intent();
i.setClassName(this.getPackageName(), this.getPackageName() + "." + this.getLocalClassName());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
return i;
} */
private void addShortcut() {
//Ver_Dialogo(2,"Si lo llamo","Joshyba");
//Creamos el Intent y apuntamos a nuestra classe principal
//al hacer click al acceso directo
//En este caso de ejemplo se llama "Principal"
Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
//Añadimos accion
shortcutIntent.setAction(Intent.ACTION_MAIN);
//Recogemos el texto des de nuestros Values
CharSequence contentTitle = getString(R.string.app_name);
//Creamos intent para crear acceso directo
Intent addIntent = new Intent();
//Añadimos los Extras necesarios como nombre del icono y icono
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, contentTitle.toString());
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(getApplicationContext(),R.drawable.ic_launcher));
//IMPORTATE: si el icono ya esta creado que no cree otro
addIntent.putExtra("duplicate", false);
//Llamamos a la acción
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
//Enviamos petición
getApplicationContext().sendBroadcast(addIntent);
}
public void prueba()
{
if(JSON_Acceso.JAcceso.Empleado.length()==0)
{
Ver_Dialogo(1,"Usuario o contraseña incorrecta","Error");
}
else
{
//addShortcut();
Ver_Dialogo(2,JSON_Acceso.JAcceso.Empleado,"Bienvenido");
Intent Menu= new Intent(Sesion.this,menu.class);
Menu.putExtra("usuario", JSON_Acceso.JAcceso.Empleado);
startActivity(Menu);
}
}
}


<br/><br/>
package com.crea;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;

public class JSON_Acceso {
public static JSON_Acceso JAcceso;
private Activity activity;
private JSONObject jObject;
private ProgressDialog progressDialog = null;
private Runnable runReadAndParseJSON;
private String Usuario;
private String Contrasenia;
public String Empleado="";
public JSON_Acceso(Activity a){
activity = a;
JSON_Acceso.JAcceso=this;
}
public void readAndParseJSONAcceso(String uSUARIO,String cONTRASENIA) throws JSONException{
Usuario=uSUARIO;
Contrasenia=cONTRASENIA;
runReadAndParseJSON = new Runnable() {
@Override
public void run() {
try{
readJSONAcceso();
} catch(Exception e){}
}
};
Thread thread = new Thread(null, runReadAndParseJSON,"bgReadJSONCreditos");
thread.start();
progressDialog = ProgressDialog.show(activity, "Descargando información", "Por favor espere",true);
}

private void readJSONAcceso() throws JSONException{
jObject = JSONAdmin.getJSONfromURL("http://localhost/concede/acceso.php?user="+Usuario+"&pass="+Contrasenia);
if(jObject != null)
parseJSONAcceso(jObject.getJSONArray("lkp_empleados"));
activity.runOnUiThread(returnRes);
}

private void parseJSONAcceso(JSONArray accesoArray) throws JSONException{
for(int i = 0; i < accesoArray.length(); i++){
Empleado=accesoArray.getJSONObject(i).getString("empleado_desc");
}
}

private Runnable returnRes = new Runnable(){
@Override
public void run() {
progressDialog.dismiss();
Sesion.sesion.prueba();
}
};
}
 
#3
Hola, en mi ultimo cuatrimestre hice el tipo de aplicaciones que mencionas pero necesito que des más información de tu webservice, en mi caso probe con dos tipos, mswebservice y uno hecho en java. Para ambos necesitas la libreria SOAP y el correspondiente hilo, espero que des más información de tu webservice para que te pueda orientar más.
 
#4
como jajaja! creo que la forma mas facil seria que lo implementaras, si obervas bien el codigo habla por si solo!!, el de php realiza una consulta del empleado del cual por medio del metodo get resive el usuario y la contraseña.

el primer codigo de java es del layout y el otro es una clase auxiliar para mandar y recibir la informacion.
 
Arriba