2012-06-14 4 views
2
Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, null); 
    for (int i = 0; i < c.getColumnCount(); i++) { 
     Log.i(getClass().getName(), "retrieveCall(): " + c.getColumnName(i)); 
    } 

4.0.x에서는 모든 colume 이름을 얻을 수 있지만 4.0.x에서는 _id 만 사용합니다. 내 코드에 어떤 문제가 있습니까? 미리 Thx!getContentResolver() 질의에 관하여 CallLog

Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, null); 
    for (int i = 0; i < c.getColumnCount(); i++) { 
     Log.i(getClass().getName(), "retrieveCall(): " + c.getColumnName(i)); 
    } 

    while (c.moveToNext()) { 
     for (int i = 0; i < c.getColumnCount(); i++) { 
      Log.i(getClass().getName(), "retrieveCall(): " + c.getColumnName(i) + " = " + c.getInt(i) + "/" + c.getString(i)); 
     } ... 

위의 코드는 4.0.x에서 잘 작동합니다. 데이터베이스의 차이점이 있습니까?

@Anu, 이것은 잘못 뭔가를해야만 발견하면 내 전체 코드는, 친절하게 말해주십시오입니다 :

private void retrieveCall() 
{ 
    Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, null); 

    if (c != null) { 
     while (c.moveToNext()) { 
      String number = c.getString(c.getColumnIndex("number")); 
      String name = c.getString(c.getColumnIndex("name")); 
      long date = c.getLong(c.getColumnIndex("date")); 

      if (number.length() > 0) { 
       LogDetail log = null; 
       if (_callTable.containsKey(number)) { 
        log = (LogDetail) _callTable.get(number); 
        log.name = name; 
        log.date = date; 
        log.amount++; 
       } else { 
        log = new LogDetail(); 
        log.name = name; 
        log.date = date; 
        log.amount = 1; 
       } 
       _callTable.put(number, log); 
      } 
     } 
     c.close(); 
    } 
} 
+0

코드가 좋습니까 ?? 어떤 플랫폼에서 고군분투하고 있습니까? 현재 2.3.5의 –

+0

입니다. – thecr0w

답변

1

... 그것은 나를 위해 일한 .....이 시도

Cursor c1 = getContentResolver().query(CallLog.Calls.CONTENT_URI,null,null,null,null); 
    for(int i=0;i<c1.getColumnCount();i++){ 
    Log.i("Column name", ""+c1.getColumnName(i)); 
     } 
+0

코드가 제대로 작동합니다 ... 코드 조각 위의 루프 코드 만 포함시켜야 할 필요가 없습니다. – Anu

+0

이 효과가 있습니까? 귀하의 코드를 붙여 실행하고 인쇄하고 하나의 _id를 얻었습니다. android의 버그입니까? 2.3.5에서 코드를 테스트했습니다 : \t \t //? {http://stackoverflow.com/questions/11031067/about-getcontentresolver-query-calllog \t \t 커서 c1 = getContentResolver(). query (CallLog.Calls.CONTENT_URI, null, null, null, null); \t \t 찾는 INT (I = 0; i가 c1.getColumnCount() ";을 난 ++) { \t \t \t Log.i ("열 이름 검사 "," "+ c1.getColumnName (I)); \t \t} \t \t //? } – thecr0w

+0

전체 코드를 붙여 넣을 수 있습니까 ??? – Anu

1

Cursor

사용의 위치로 이동하는 것을 잊지 마세요 :

Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, null); 
while (c.moveToNext()) { 
    Log.i(getClass().getName(), "retrieveCall(): " + c.getColumnName(i)); 
} 
+0

@lon 그는 단지 열 이름을 인쇄하려고합니다. 따라서 c.moveToNext()는 필요하지 않습니다. –

+0

미안하지만, 나 자신을 잘 설명하지 못했다. moveToNext()를 호출 했는데도 여전히 결과가 없습니다. – thecr0w