Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 26/08/14, 18:45:03
Array

[xs_avatar]
loadgo loadgo no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Mensajes: 37
Tu operador: Movistar

Content Providers

Hola estoy probando un nuevo codigo para aprender a dominar los contents providers en concreto en este codigo estoy leyendo los numeros del telefono, la cuestion es que en el codigo de prueba que he copiado y pegado ya venia el TYPE y el NUMBER y hasta ahi funciona perfecto.

Pensando que lo entendia y para probar si era cierto he querido añadir la DURATION pero a pesar de que hago lo mismo que en TYPE y NUMBER no aparece la duracion. Alguien me puede explicar porque.

Y si me pudierais explicar para que sirve el codigo

tipo = cur.getInt(colTipo);
telefono = cur.getString(colTelefono);
duracion = cur.getString(colDuracion);

no lo acabo de entender muy bien.

Muchas gracias.

Este es el codigo:


Código:
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog;
import android.widget.TextView;


public class MyActivity extends Activity {

    TextView txtResultados;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        txtResultados = (TextView)findViewById(R.id.tvResultado);

        //Creamos el array con los datos que queremos extraer
        String[] projection = new String[] {
                CallLog.Calls.TYPE,
                CallLog.Calls.NUMBER,
                CallLog.Calls.DURATION };

        //Creamos el Uri
        Uri llamadasUri =  CallLog.Calls.CONTENT_URI;


        ContentResolver cr = getContentResolver();

        Cursor cur = cr.query(llamadasUri,
                projection, //Columnas a devolver
                null,       //Condición de la query
                null,       //Argumentos variables de la query
                null);      //Orden de los resultados

        if (cur.moveToFirst())
        {
            //Variable para controlar el tipo de llamada y el num de telf
            int tipo;
            String telefono;
            String duracion;
            //Variable para decir que tipo de llamada es
            String tipoLlamada = "";

            // Obtenemos los índices de las columnas
            int colTipo = cur.getColumnIndex(CallLog.Calls.TYPE);
            int colTelefono = cur.getColumnIndex(CallLog.Calls.NUMBER);
            int colDuracion = cur.getColumnIndex(CallLog.Calls.DURATION);

            txtResultados.setText("");

            do
            {
                //ASignamos el indice de las columnas a las variables
                tipo = cur.getInt(colTipo);
                telefono = cur.getString(colTelefono);
                duracion = cur.getString(colDuracion);

                //Dependiendo del tipo de calllog que sae un texto comprensible
                if(tipo == CallLog.Calls.INCOMING_TYPE)
                    tipoLlamada = "ENTRADA";
                else if(tipo == CallLog.Calls.OUTGOING_TYPE)
                    tipoLlamada = "SALIDA";
                else if(tipo == CallLog.Calls.MISSED_TYPE)
                    tipoLlamada = "PERDIDA";

                //Mostramos el resultado dentro de txtResultados
                txtResultados.append(tipoLlamada + " - " + telefono + duracion + "\n");

            //Pasamos al siguiente dato
            } while (cur.moveToNext());
        }
    }

}
Responder Con Cita


  #2  
Viejo 27/08/14, 00:08:58
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
 Cita: Originalmente Escrito por loadgo Ver Mensaje
tipo = cur.getInt(colTipo);
telefono = cur.getString(colTelefono);
duracion = cur.getString(colDuracion);
El ContentProvider trabaja como si fuera una tabla de una base de datos SQLite

Código:
 // Obtenemos los índices de las columnas
int colTipo = cur.getColumnIndex(CallLog.Calls.TYPE);
int colTelefono = cur.getColumnIndex(CallLog.Calls.NUMBER);
int colDuracion = cur.getColumnIndex(CallLog.Calls.DURATION);
En la primera asignacion guardas en colTipo el indice de la columna CallLog.Calls.TYPE

CallLog.Calls.TYPE es una constante almacenada en la clase CallLog.Calls, y esa constante es un entero que indica en que columna se encuentra la informacion respectiva al TYPE de la llamada

Lo mismo con las siguientes

Al trabajar con una BD (Base de datos), ofrece un Cursor, un objeto mediante el cual te vas moviendo entre los resultados de la consulta a la BD
Eso se hace en un bucle do-while, que en el while llama a la funcion cursor.moveToNext(), el cual pasa al siguiente resultado y devuelve un booleano que indica si hay siguiente resultado

A la hora de recoger los datos:
Código:
tipo = cur.getInt(colTipo);
telefono = cur.getString(colTelefono);
duracion = cur.getString(colDuracion);
Haces una asignacion en formato
[variable] = cur.getTIPODEVARIABLE(columna)

donde
variable es la variable de destino donde almacenaras los datos del resultado
cur es el objeto Cursor
getTIPODEVARIABLE es una funcion que recibe como parametro la columna de la DB a mirar (la has guardado antes)


Si no has trabajado antes con bases de datos, te recomiendo que le eches un ojo a su forma de trabajar (ya no con Android, sino en general), ya que te ayudara a comprender como funcionan
Responder Con Cita
  #3  
Viejo 27/08/14, 01:29:09
Array

[xs_avatar]
loadgo loadgo no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Mensajes: 37
Tu operador: Movistar

Muchas gracias por tu tiempo y por tu información
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:30:51 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /