2016-08-15 8 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は時折、次の例外を報告している:

致命的な例外: android.database.sqlite.SQLiteException: アプリケーションcom.forever.forever.Utils.app.ProdForeverApplicationを作成java.lang.RuntimeExceptionができません:コンパイル中に、SELECTカウント(*)のASカウントからイメージを返します。 mime_type NOT IN( 'application/vnd.oma.drm.message'、 'application/vnd'):構文エラー(コード ) .oma.drm.content '、' application/vnd.oma.drm.dcf ') AND())

誰でもここで何が起こっているのか知っていますか?

答えて

1

(例外メッセージでわかるように)SQLテキストには空のAND()があります。明らかに、ここで条件が不足しています。常にTRUE得ダミー条件を提供するようにしてください:

"0=0" 

は、おそらくあなたは、最後のパラメータのためにそれを提供する必要が(私はこれは、ある1かわからない)、または文字列配列

の一環として、
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テンプレートが解決されるかどうかによって異なります。 2つのバージョンがありますか? 1つはAND(...)と1つではありませんか? Id 'MediaStore.Images.Media.EXTERNAL_CONTENT_URI'は常に同じですか? –

関連する問題