2010-03-05 32 views
7

Mi objeto ContentValues ​​tiene claves de cadena, y me gustaría obtener un resultado String [] con todas las claves en él?¿Cómo obtener las claves de ContentValues?

¿Cómo se itera un objeto ContentValues?

EDIT 1

Después de obtener dos respuestas que se me ocurrió esto, es lo que ves problemas con él?

 ArrayList<String> ar = new ArrayList<String>(); 
     ContentValues cv=data; 
     Set<Entry<String, Object>> s=cv.valueSet(); 
     for (Entry<String, Object> entry : s) { 
      ar.add(entry.getKey()); 
     } 
     String[] projection=new String[ar.size()]; 
     ar.toArray(projection); 
+0

nada se sale, qué no funciona? – RickNotFred

+0

También puede poblar la matriz directamente desde el Conjunto, en lugar de hacerlo primero a través de ArrayList, pero aparte de eso, se ve bien. –

Respuesta

3

De acuerdo con el documento, el método "valueSet()" devuelve un conjunto de todas las claves y valores. A continuación, puede usar un iterador en el conjunto resultante y getKey() en cada uno de los elementos de entrada iterados para recopilar en una matriz de cadenas.

18

Pruebe este código. Simplemente pase su ContentValues en el método.

public void printContentValues(ContentValues vals) 
{ 
    Set<Entry<String, Object>> s=vals.valueSet(); 
    Iterator itr = s.iterator(); 

    Log.d("DatabaseSync", "ContentValue Length :: " +vals.size()); 

    while(itr.hasNext()) 
    { 
     Map.Entry me = (Map.Entry)itr.next(); 
     String key = me.getKey().toString(); 
     Object value = me.getValue(); 

     Log.d("DatabaseSync", "Key:"+key+", values:"+(String)(value == null?null:value.toString())); 
    } 
} 
+0

+1 para dar el código de muestra – lalitm

+0

¿Alguna razón específica que usaste 'Entry' first y luego' Map.Entry' después? ¿Son ambos diferentes en este contexto? – faizal

2

Puede probar esto también:

String ar [] = {}; 
    ContentValues cv=new ContentValues(); 
    int i=0; 
    for(String key: cv.keySet()){ 
     ar[i] = key; 
    } 
Cuestiones relacionadas