2012-04-25 1 views
1

ContentResolver.query избежать аргументов выбора?Содержит ли ContentResolver.query аргументы или просто заменяет вопросительные знаки?

Например, я должен вручную избежать аргументы в selArgs, прежде чем делать что-то вроде

Cursor c = contentResolver.query(uri, null, "mimetype=?", selArgs, null); 

или это делается методом query?

+0

Чем больше я думаю об этом, тем больше я убежден, что это * действительно * избежать аргументы правильно. Различные СУБД AFAIK могут иметь разные алгоритмы ускорения. Было бы нецелесообразно, если бы контракт «запрос» был привязан к конкретной СУБД, и не имело бы смысла для меня знать, какие СУБД, которые поддерживают контент-резольвер. – aioobe

ответ

0

Нет. Вы должны сделать это вручную в своем контент-провайдере.

Исходный код функции запроса:

public final Cursor query(Uri uri, String[] projection, 
      String selection, String[] selectionArgs, String sortOrder) { 
     IContentProvider provider = acquireProvider(uri); 
     if (provider == null) { 
      return null; 
     } 
     try { 
      long startTime = SystemClock.uptimeMillis(); 
      Cursor qCursor = provider.query(uri, projection, selection, selectionArgs, sortOrder); 
      if (qCursor == null) { 
       releaseProvider(provider); 
       return null; 
      } 
      // force query execution 
      qCursor.getCount(); 
      long durationMillis = SystemClock.uptimeMillis() - startTime; 
      maybeLogQueryToEventLog(durationMillis, uri, projection, selection, sortOrder); 
      // Wrap the cursor object into CursorWrapperInner object 
      return new CursorWrapperInner(qCursor, provider); 
     } catch (RemoteException e) { 
      releaseProvider(provider); 

      // Arbitrary and not worth documenting, as Activity 
      // Manager will kill this process shortly anyway. 
      return null; 
     } catch (RuntimeException e) { 
      releaseProvider(provider); 
      throw e; 
     } 
    } 
+0

Это просто делегирует запрос другой функции 'query'. См. Строку, начинающуюся с 'provider.query'. Что такое контракт «IContentProvider.query»? – aioobe

+0

Запрос будет передан провайдеру контента, который может работать с указанным uri. У вас есть поставщик контента, который расширяет андроид.content.ContentProvider? Каков ваш ури? – Blehi

+0

Умм, меня интересует общий случай, а не какой-то конкретный сценарий. (Другими словами, мой вопрос не связан с определенным uri.) – aioobe