2016-08-15 3 views
0

Android 장치에서 이미지 수를 얻으려고합니다. 여기에 사용하는 코드는 다음과 같습니다.테이블 개수를 가져 오는 중 SQLiteException 구문 오류 (코드 1)

int count = -1; 

    Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      new String[] {"count(*) AS count"}, 
      null, 
      null, 
      null); 

    if(cursor != null){ 
     if(cursor.moveToNext()){ 
      count = cursor.getInt(0); 
     } 
     cursor.close(); 
    } 

이것은 대부분의 시간 동안 작동하며 테스트에 실패하지 않았습니다. 그러나 Crashlytics 가끔 다음과 같은 예외를보고 :

치명적인 예외 : 애플리케이션 com.forever.forever.Utils.app.ProdForeverApplication을 만들 java.lang.RuntimeException가이 없습니다 android.database.sqlite.SQLiteException : (카운트 1) : 컴파일 중 SELECT count (*) AS 카운트 이미지 WHERE ( mime_type NOT IN ('application/vnd.oma.drm.message', 'application/vnd .oma.drm.content ','application/vnd.oma.drm.dcf ')

아무도 무슨 일이 일어나고 있는지 알고 있니?

답변

1

SQL 텍스트에 AND()이 비어 있습니다 (예외 메시지에서 볼 수 있듯이). 분명히 조건이 여기에 누락되었습니다. TRUE 항상 항복 더미 조건을 제공하기 위해 시도 :

"0=0" 

이 아마 마지막 매개 변수를 제공해야 (나는 어느 쪽이 모르는 그렇게하는) 또는 문자열 배열의 일부로

Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
     new String[] {"count(*) AS count"}, 
     null, 
     null, 
     "0=0"); 

또는

Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
     new String[] {"count(*) AS count", "0=0"}, 
     null, 
     null, 
     null); 

결과 SQL은 다음과 같아야합니다

SELECT count(*) AS count FROM images 
WHERE (mime_type NOT IN('application/vnd.oma.drm.message', 
    'application/vnd.oma.drm.content','application/vnd.oma.drm.dcf') AND (0=0)) 
+0

고마워! 나는 그것을 밖으로 시도 할 것이다. null을 제공하고 예외적 인 경우가 종종 발생하는 대부분의 시간에서 작동하는 이유가 무엇인지 알고 계십니까? –

+0

항상 동일한 SQL 템플리트가 해석되는지 여부에 따라 다릅니다. 두 버전이 있습니까? 하나는 AND (...)이고 하나는 없습니까? Id'MediaStore.Images.Media.EXTERNAL_CONTENT_URI'는 항상 동일합니까? –

관련 문제