Foros del Web » Programando para Internet » Android »

Mostrar tabla en AutoCompleteTextView

Estas en el tema de Mostrar tabla en AutoCompleteTextView en el foro de Android en Foros del Web. Hola. Necesito mostrar datos en un AutoCompleteTextView desde una tabla. Hice: Código: Cursor cnuevo = baseMatriculas.rawQuery("SELECT * FROM matriculas ORDER BY matricula",null); SimpleCursorAdapter adapter = ...
  #1 (permalink)  
Antiguo 23/05/2012, 14:31
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Mostrar tabla en AutoCompleteTextView

Hola. Necesito mostrar datos en un AutoCompleteTextView desde una tabla.

Hice:
Código:
Cursor cnuevo = baseMatriculas.rawQuery("SELECT * FROM matriculas ORDER BY matricula",null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_dropdown_item_1line, cnuevo, new String[] {"matricula"}, new int[] {R.id.txtMatricula});

editMatricula = (AutoCompleteTextView) findViewById(R.id.txtMatricula);
editMatricula.setThreshold(1);
editMatricula.setAdapter(adapter);
Así como está planteado me da error.

Estuve leyendo en google que hay que utilizar CursorToStringConverter, tal vez falta esto y por eso me da error.

Desde ya muchas gracias por las respuestas.
Saludos
  #2 (permalink)  
Antiguo 24/05/2012, 06:17
Avatar de javih  
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 13 años, 3 meses
Puntos: 12
Respuesta: Mostrar tabla en AutoCompleteTextView

¿Y cual es la excepción?

¿Devuelve datos la consulta?
  #3 (permalink)  
Antiguo 24/05/2012, 06:58
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

javih, gracias por responder.

La consulta no devuelve datos.

En LogCat me muestra:

05-24 12:38:13.244: D/dalvikvm(336): GC_EXTERNAL_ALLOC freed 65K, 52% free 2595K/5379K, external 2032K/2137K, paused 46ms
05-24 12:38:16.635: W/KeyCharacterMap(336): No keyboard for id 0
05-24 12:38:16.645: W/KeyCharacterMap(336): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-24 12:51:33.925: D/dalvikvm(373): GC_EXTERNAL_ALLOC freed 66K, 52% free 2595K/5379K, external 2032K/2137K, paused 45ms
05-24 12:51:38.155: W/KeyCharacterMap(373): No keyboard for id 0
05-24 12:51:38.155: W/KeyCharacterMap(373): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-24 12:51:42.504: D/AndroidRuntime(373): Shutting down VM
05-24 12:51:42.504: W/dalvikvm(373): threadid=1: thread exiting with uncaught exception (group=0x40015560)
05-24 12:51:42.514: E/AndroidRuntime(373): FATAL EXCEPTION: main
05-24 12:51:42.514: E/AndroidRuntime(373): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.acopio/android.acopio.d_matricula}: java.lang.NullPointerException
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1647)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:1663)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.ActivityThread.access$1500(ActivityThr ead.java:117)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:931)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.os.Handler.dispatchMessage(Handler.java:99 )
05-24 12:51:42.514: E/AndroidRuntime(373): at android.os.Looper.loop(Looper.java:123)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.ActivityThread.main(ActivityThread.jav a:3683)
05-24 12:51:42.514: E/AndroidRuntime(373): at java.lang.reflect.Method.invokeNative(Native Method)
05-24 12:51:42.514: E/AndroidRuntime(373): at java.lang.reflect.Method.invoke(Method.java:507)
05-24 12:51:42.514: E/AndroidRuntime(373): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:839)
05-24 12:51:42.514: E/AndroidRuntime(373): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:597)
05-24 12:51:42.514: E/AndroidRuntime(373): at dalvik.system.NativeStart.main(Native Method)
05-24 12:51:42.514: E/AndroidRuntime(373): Caused by: java.lang.NullPointerException
05-24 12:51:42.514: E/AndroidRuntime(373): at android.acopio.d_matricula.onCreate(d_matricula.ja va:72)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1047)
05-24 12:51:42.514: E/AndroidRuntime(373): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1611)
05-24 12:51:42.514: E/AndroidRuntime(373): ... 11 more

Saludos
  #4 (permalink)  
Antiguo 24/05/2012, 15:14
Avatar de javih  
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 13 años, 3 meses
Puntos: 12
Respuesta: Mostrar tabla en AutoCompleteTextView

El objeto que le pasas al método de la línea 72 vale null, por eso la excepción.

Código:
Caused by: java.lang.NullPointerException
05-24 12:51:42.514: E/AndroidRuntime(373): at android.acopio.d_matricula.onCreate(d_matricula.ja va:72)

Revisa esa línea a ver que es lo que ocurre.

Saludos
  #5 (permalink)  
Antiguo 24/05/2012, 18:33
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Ok. Solucioné ese problema.

Ahora me muestra:


05-25 00:27:51.279: D/dalvikvm(335): GC_EXTERNAL_ALLOC freed 65K, 52% free 2595K/5379K, external 2032K/2137K, paused 69ms
05-25 00:27:59.819: D/dalvikvm(370): GC_EXTERNAL_ALLOC freed 66K, 52% free 2595K/5379K, external 2032K/2137K, paused 44ms
05-25 00:28:02.908: W/KeyCharacterMap(370): No keyboard for id 0
05-25 00:28:02.908: W/KeyCharacterMap(370): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
05-25 00:28:05.969: D/AndroidRuntime(370): Shutting down VM
05-25 00:28:05.999: W/dalvikvm(370): threadid=1: thread exiting with uncaught exception (group=0x40015560)
05-25 00:28:06.038: E/AndroidRuntime(370): FATAL EXCEPTION: main
05-25 00:28:06.038: E/AndroidRuntime(370): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.acopio/android.acopio.d_matricula}: java.lang.IllegalArgumentException: column '_id' does not exist
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1647)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:1663)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.ActivityThread.access$1500(ActivityThr ead.java:117)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:931)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.os.Handler.dispatchMessage(Handler.java:99 )
05-25 00:28:06.038: E/AndroidRuntime(370): at android.os.Looper.loop(Looper.java:123)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.ActivityThread.main(ActivityThread.jav a:3683)
05-25 00:28:06.038: E/AndroidRuntime(370): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 00:28:06.038: E/AndroidRuntime(370): at java.lang.reflect.Method.invoke(Method.java:507)
05-25 00:28:06.038: E/AndroidRuntime(370): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:839)
05-25 00:28:06.038: E/AndroidRuntime(370): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:597)
05-25 00:28:06.038: E/AndroidRuntime(370): at dalvik.system.NativeStart.main(Native Method)
05-25 00:28:06.038: E/AndroidRuntime(370): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
05-25 00:28:06.038: E/AndroidRuntime(370): at android.database.AbstractCursor.getColumnIndexOrTh row(AbstractCursor.java:314)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.widget.CursorAdapter.init(CursorAdapter.ja va:111)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.widget.CursorAdapter.<init>(CursorAdapter. java:90)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.widget.ResourceCursorAdapter.<init>(Resour ceCursorAdapter.java:47)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.widget.SimpleCursorAdapter.<init>(SimpleCu rsorAdapter.java:84)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.acopio.d_matricula.onCreate(d_matricula.ja va:81)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1047)
05-25 00:28:06.038: E/AndroidRuntime(370): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1611)
05-25 00:28:06.038: E/AndroidRuntime(370): ... 11 more
05-25 00:28:08.238: I/Process(370): Sending signal. PID: 370 SIG: 9

Veo que muestra: column '_id' does not exist, pero esa columna nunca la utilicé en mi programa.

Gracias y saludos
  #6 (permalink)  
Antiguo 24/05/2012, 19:30
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Agregué la columna _id y ahora no da más error, pero me despliega filas vacías. Si elijo una de esas filas me devuelve cualquier cosa menos lo que está en la tabla.

Saludos
  #7 (permalink)  
Antiguo 24/05/2012, 19:59
Avatar de javih  
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 13 años, 3 meses
Puntos: 12
Respuesta: Mostrar tabla en AutoCompleteTextView

Eso está aquí:

http://developer.android.com/referen...orAdapter.html

The Cursor must include a column named "_id" or this class will not work.

Sobre lo de las filas vacías ni idea, es que no me gusta el sql, tan poco que uso un odb. A lo mejor alguien que le haya ocurrido lo mismo te pueda decir.
  #8 (permalink)  
Antiguo 25/05/2012, 08:36
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Ok gracias.

Lo que me devuelve en el AutoCompleteTextView al hacer click en una de las filas vacías es: android.database.sqlite.SQLiteCursor@405534f0

Saludos
  #9 (permalink)  
Antiguo 25/05/2012, 09:07
Avatar de javih  
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 13 años, 3 meses
Puntos: 12
Respuesta: Mostrar tabla en AutoCompleteTextView

Ese es el Cursor y probablemente hayas usado el método .toString()

Ahora creo que es cuando tienes que redefinir el método que decías de convertToString o algo así para que devuelva algo así:

return cursor.getString(cursor.getColumnIndex("matriculas "));

Saludos

Última edición por javih; 25/05/2012 a las 09:14
  #10 (permalink)  
Antiguo 25/05/2012, 11:12
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Ok. Ahora si me devuelve el dato esperado.

El único problema que me queda por resolver es que en la lista desplegable aparece todo en blanco.

El código ha quedado así:

Código:
	        baseMatriculas = openOrCreateDatabase(nombreBDMatricula, MODE_WORLD_WRITEABLE, null);   
	        Cursor cnuevo = baseMatriculas.query(tablaMatriculas, null,null,null,null,null,null);	        
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_dropdown_item_1line, cnuevo, new String[] {"matricula"}, new int[] {R.id.txtMatricula});
	        
            adapter.setCursorToStringConverter(new CursorToStringConverter() {
            	 
                public CharSequence convertToString(Cursor cursor) {
                    return cursor.getString(cursor.getColumnIndex("matricula"));
                }
            });
    			
            editMatricula = (AutoCompleteTextView) findViewById(R.id.txtMatricula);            

            editMatricula.addTextChangedListener(new TextWatcher() 
            {

        		 public void afterTextChanged(Editable s) {

        		     String filtered_str = s.toString();
        		     	AvisoError = "NO";
        		         if (filtered_str.matches(".*[^A-Z^0-9|-].*")) {
        		         AvisoError = "SI";
        		         //filtered_str = filtered_str.replaceAll("[^A-Z^0-9]", "");

        		         //s.clear();

        		         // s.insert(0, filtered_str);
        		         AlertDialog.Builder dialogo1 = new AlertDialog.Builder(d_matricula.this);  
        		         dialogo1.setTitle("¡Atención!");  
        		         dialogo1.setMessage("Está permitido ingresar sólo letras mayúsculas, números y guion."); 
        		         dialogo1.setNeutralButton("Aceptar",null);
        		         dialogo1.show();	
        		         //Toast.makeText(getApplicationContext(), "Ingresó un caracter no válido", Toast.LENGTH_SHORT).show();

        		     }

        		 }

        		     public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        		     public void onTextChanged(CharSequence s, int start, int before, int count) {}
        		 });
            
            editMatricula.setThreshold(1);
            editMatricula.setAdapter(adapter);
Saludos
  #11 (permalink)  
Antiguo 25/05/2012, 14:28
Avatar de javih  
Fecha de Ingreso: agosto-2011
Mensajes: 201
Antigüedad: 13 años, 3 meses
Puntos: 12
Respuesta: Mostrar tabla en AutoCompleteTextView

¿hay datos en la tabla?, ¿has probado a hacer la consulta desde el prompt de sqlite3? para ver si te devuelve lo que quieres y así compruebas que la consulta está bien.

Tampoco estaría mal verificar que se llame 'matricula' la tabla, por si acaso (aunque creo que sino encuentra la tabla lanza una excepción, pero no estoy seguro), las tablas y el schema lo puedes ver con estos comandos:

.schema y .tables


Saludos


PD: esto te puede venir bien http://davanum.wordpress.com/2007/12...te3-databases/
  #12 (permalink)  
Antiguo 25/05/2012, 15:45
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Si hay datos en la tabla. En la lista desplegable aparecen dos opciones a elegir, si elijo cualquiera de ellas me devuelve el dato correcto de la tabla.

El problema es que en dicha lista desplegable en las opciones no se ve nada (es como si las letras tuvieran color blanco).

Saludos
  #13 (permalink)  
Antiguo 28/05/2012, 07:15
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Otro problema que tengo es que despliega todas las matrículas al presionar cualquier letra, es decir tengo matrículas que comienzan con R y otras con W. Si presiono por ejemplo la X me despliega todas las matrículas comenzadas con R y con W.

Le hice otros cambios al código pero todo sigue con los mismos problemas.

Código:
            editMatricula = (AutoCompleteTextView) findViewById(R.id.txtMatricula); 

	        baseMatriculas = openOrCreateDatabase(nombreBDMatricula, MODE_WORLD_WRITEABLE, null);   
	        String []Columnas = new String[]{"_id","matricula"};
	        Cursor cnuevo = baseMatriculas.query(tablaMatriculas, Columnas,null,null,null,null,null);
	        this.startManagingCursor(cnuevo);
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_dropdown_item_1line, cnuevo, new String[] {"matricula"}, new int[] {R.id.txtMatricula});
	        
            adapter.setCursorToStringConverter(new CursorToStringConverter() {            	 
                public CharSequence convertToString(Cursor cnuevo) {
                    return cnuevo.getString(cnuevo.getColumnIndex("matricula"));
                }
            });	        
           
            editMatricula.addTextChangedListener(new TextWatcher() 
            {
        		 public void afterTextChanged(Editable s) {

        		     String filtered_str = s.toString();
        		     	 AvisoError = "NO";
        		         if (filtered_str.matches(".*[^A-Z^0-9|-].*")) {
        		         AvisoError = "SI";
        		         //filtered_str = filtered_str.replaceAll("[^A-Z^0-9]", "");

        		         //s.clear();

        		         // s.insert(0, filtered_str);
        		         AlertDialog.Builder dialogo1 = new AlertDialog.Builder(d_matricula.this);  
        		         dialogo1.setTitle("¡Atención!");  
        		         dialogo1.setMessage("Está permitido ingresar sólo letras mayúsculas, números y guion."); 
        		         dialogo1.setNeutralButton("Aceptar",null);
        		         dialogo1.show();	
        		         //Toast.makeText(getApplicationContext(), "Ingresó un caracter no válido", Toast.LENGTH_SHORT).show();

        		     }

        		 }

        		     public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        		     public void onTextChanged(CharSequence s, int start, int before, int count) {}
        	});
            

            editMatricula.setThreshold(1);
            editMatricula.setAdapter(adapter);
El xml es:

Código:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txtOperario"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10px"
        android:gravity="center"
        android:text=""
        android:textColor="#ffffff"
        android:textSize="24px" />
        
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30px"
        android:gravity="center"
        android:text="Ingrese matrícula del camión"
        android:textColor="#ffffff"
        android:textSize="24px" />
    
    <AutoCompleteTextView 
        android:id="@+id/txtMatricula"
        android:layout_width="fill_parent"
        android:layout_height="100px"
        android:layout_marginTop="10px"
		android:textSize="44sp"
		android:textStyle="bold"
		android:gravity="center"
		android:singleLine="true"
		android:capitalize="characters" >

        <requestFocus />

    </AutoCompleteTextView>
        
    <Button android:id="@+id/botonInicio"
        android:layout_width="fill_parent"
        android:layout_height="100px"
        android:textSize="30sp"
        android:text="" />

    <TableRow>
    <Button android:id="@+id/botonMatricula1"
        android:layout_width="235px"
        android:layout_height="100px"
        android:textSize="30sp"
        android:text="TRP4567" />

    <Button android:id="@+id/botonMatricula2"
        android:layout_width="235px"
        android:layout_height="100px"
        android:textSize="30sp"
        android:text="RTP489" />
     </TableRow>

    <TableRow>
    <Button android:id="@+id/botonMatricula3"
        android:layout_width="235px"
        android:layout_height="100px"
        android:textSize="30sp"
        android:text="TRP4567" />

    <Button android:id="@+id/botonMatricula4"
        android:layout_width="235px"
        android:layout_height="100px"
        android:textSize="30sp"
        android:text="RTP489" />
    </TableRow>
</TableLayout>
Saludos
  #14 (permalink)  
Antiguo 28/05/2012, 13:10
 
Fecha de Ingreso: abril-2005
Mensajes: 483
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Mostrar tabla en AutoCompleteTextView

Finalmente encontré mi error de porque no se veían los datos desplegados:

en:

Código:
  new int[] {R.id.txtMatricula});
debía ir
Código:
new int[] {android.R.id.text1}
El único problema que me queda por resolver es que me despliega todos los registros de la tabla y no los que comienzan igual a lo que se va tecleando.

Saludos

Etiquetas: google, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:10.