2010-03-05 28 views
7

Đối tượng ContentValues ​​của tôi có khóa chuỗi và tôi muốn nhận được kết quả String [] có tất cả các khóa trong đó?Làm cách nào để lấy khóa từ ContentValues?

Làm cách nào để lặp lại đối tượng ContentValues?

EDIT 1

Sau khi nhận được hai phản ứng tôi đã đưa ra với điều này, bạn có thấy vấn đề với nó?

 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

gì bật ra, không cho nó hoạt động? – RickNotFred

+0

Bạn cũng có thể cư trú mảng trực tiếp từ Set, thay vì thông qua ArrayList đầu tiên, nhưng khác hơn thế, có vẻ tốt. –

Trả lời

3

Phương pháp, phương thức "valueSet()" trả về một tập hợp tất cả các khóa và giá trị. Sau đó bạn có thể sử dụng một trình lặp trên Set và getKey() kết quả trên mỗi phần tử Entry được lặp lại để thu thập vào một mảng String.

18

Hãy thử mã này. Chỉ cần vượt qua ContentValues của bạn vào phương pháp.

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 để cung cấp mã mẫu – lalitm

+0

Bất kỳ lý do cụ thể nào mà bạn đã sử dụng 'Entry' trước và sau đó là' Map.Entry' sau? Cả hai đều khác nhau trong bối cảnh này? – faizal

2

Bạn có thể thử cái này cũng:

String ar [] = {}; 
    ContentValues cv=new ContentValues(); 
    int i=0; 
    for(String key: cv.keySet()){ 
     ar[i] = key; 
    } 
Các vấn đề liên quan