2012-01-29 2 views
0

인 열 이름을 요청합니다. ListAdapter를 사용하여 커서의 결과를 표시하려고합니다. 그것은이 시점이 시점에서응용 프로그램이이 오류와 함께 닫습니다 - 테이블 이름이

ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.cattle_layout, 
      c,new String[]{"c.animal_id, c.eartag"},new int[]{R.id.TextView_cattleId,R.id.TextView_earTag}); 

에 도달 할 때까지 내 기록에 따르면 모든 것이 올바른 결과를 반환되고, 프로그램은 위에서 언급 한 메시지와 함께 예외가 발생하고 그 다음 이름은 두 개의 필드가 나는 표시 할 -에서 그 다음에 java.lang.Exception이 있고 AbstractCursor.getColumnIndexOrThrow에 대한 참조입니다.

'new String [] creation'에 문제가있을 수 있지만 검색했는데 찾을 수 없습니다. .

제안 사항을 이해하십시오.

커서 창조

 String asColumnsToReturn[] ={ 
    "tbl_cattle._id", 
    "tbl_cattle.animal_id", 
    "tbl_cattle.eartag"}; 

    Cursor c = mDatabase.query(TABLE_CATTLE, asColumnsToReturn,"type_of_animal=?", new String[]{targetType},null, null, null, null); 
    Log.i(DEBUG_TAG, "Record Count " + c.getCount() + " Columns: " + c.getColumnCount()); 

내 로그 나에게 where 절에 대한 정확한 수를 제공하고, 올바른 데이터가

+0

테이블 작성 명세서를 게시하십시오. – JoxTraex

+0

stacktrace를 포함하십시오. – Leandros

답변

-1

그 두 개의 문자열들이 같은 소리 단지 무엇

new String[] { "COLUMNNAME_ANIMAL_ID", "COLUMNNAME_EARTAG" } 

을 시도합니다. 또한 실제로 열 이름에 정적 문자열을 사용해야합니다.

public final static String COLUMNNAME_ANIMAL_ID = animalId; // where animalId is how the SQL column will be named. 

을 당신이 그때 사용하는 것이이 예에서 DatabaseClass.COLUMNNAME_ANIMAL_ID

에 필요한 모든 곳에서 그 물건을 호출 : 데이터베이스 내에서 정의 한 번 좋아

new String[] { DatabaseClass.COLUMNNAME_ANIMAL_ID, DatabaseClass.COLUMNNAME_EARTAG } 

이 방법 당신은) SQL에서 맞춤법 오류가 없는지 확인하고 b) 어디에서 사용했는지 상관없이 1,2,3만큼 빠르게 열/표/DB 이름을 변경할 수 있습니다.

+0

예 그냥 데이터를 가져 오는 커서에서 animalid의 columnname을 사용해야한다는 것을 설명하기 위해 대문자를 사용했습니다. 레이아웃 내에서 R.id가 올바른 열 이름을 사용하고 있습니까? 또한 커서에 항목이 포함되어 있는지 살펴 보았습니까? 구멍 디버그 스택을 게시하면 도움이됩니다. – masi

+0

감사합니다. – Hank

2
new String[]{"c.animal_id, c.eartag"} 

new String[]{"c.animal_id", "c.eartag"} 

에 기록에 (당신은했다 단일 문자열로.)

또한 eas 일 것입니다. 코드를 읽고, 디버깅하고, 유지 관리하는 데있어 모든 것을 한 줄로 치지 않으려 고합니다. "나는 당신이"당신이 "정말로 신경 쓰지 않는 것이 아니라"이 일이 무엇을해야하는지 기억하지 못하고 그것을 읽지 못한다는 것을 기억하지 못한다 "는 것이 정말 큰 문제입니다.

+0

시도해 본 결과 오류가 발생하여 첫 번째 문자열 만 반환했습니다. – Hank

+0

문제에 대해 더 분명히해야합니다. 던져진 예외가 수정되었습니다. ListAdapter를 사용하는 코드를 게시하지 않은 경우 어떻게 디버깅합니까? – bdares

+0

죄송합니다. 모니터에 의도적 인 것이 아니기 때문에 매우 넓은 화면이므로 너무 넓지는 않습니다. – Hank

0

비슷한 문제가 발생했습니다. Cursor가 rawQuery()을 호출하여 검색 한 이름에 점으로 열 이름을 올바르게 검색하지 못할 수도 있습니다. 예 : c.animalId은 작동하지 않지만 투영을 c_animalId으로 변경하면됩니다. 그것은 나를 위해 일하는 것 같습니다.

코드에서 오류가 발생하기 전에 커서의 모든 열을 반복하고 열이 투영과 동일한 경우 문을 기록합니다. 디버깅 및 오류 전에 중단 점 설정 커서에서 예상대로 모든 열을 정확히 볼 수 있습니다. 안드로이드는 코드의 다른 여러 지점에서 칼럼 이름을 정확하게 인용하지 않는다는 것을 알고있다. (나는 어리 석다.) 나는이 문제가 비슷한 문제와 관련이 있다고 생각한다.