2016-06-17 1 views
1

Я использую этот кусок кода, чтобы проверить, существует ли файл в диск:Android Drive API - Проверка, если файл существует всегда указывает на не существующие

Query query = new Query.Builder() 
         .addFilter(Filters.eq(SearchableField.TITLE, "tmp.txt")) 
         .build(); 
new MyAsyncTask().execute(query); 

class MyAsyncTask extends AsyncTask<Query, Void, MetadataBufferResult>{ 
    @Override 
    protected MetadataBufferResult doInBackground(Query... params) { 
     return Drive.DriveApi.query(getGoogleApiClient(), params[0]).await(); 
} 

    @Override 
    protected void onPostExecute(MetadataBufferResult metadataBufferResult) { 
     if(metadataBufferResult.getMetadataBuffer().getCount()==0) 
      showMessage("File does not exist"); 
     else 
      showMessage("File exists"); 
    } 
} 

Моя логика в принципе использовать запрос для фильтрации выведите все файлы с именем «tmp.txt», а затем проверьте, не считается ли счет возвращаемого таким образом MetaDataBuffer 0. Однако, независимо от того, существует ли файл, счетчик всегда равен 0, и сообщение отображается как «Файл не существует ». Что мне здесь не хватает? Я использую модифицированную версию QueryFilesActivity из Android-демонстрационного мастера, предоставляемого Android.

ответ

1

Есть 3 причины, почему запрос возвращает 0 элементов:

  1. Элемент не существует.
  2. Элемент существует, но ваше приложение не имеет доступа к этому элементу.
  3. Элемент существует (на сервере), ваше приложение имеет доступ к этому элементу, но элемент не синхронизирован локально (устройство находится в автономном режиме или кеш не обновляется). В этом конкретном случае вы можете вызвать метод requestSync для обеспечения обновления локального кеша и повторного запроса.
+0

Такие варианты исключаются, учитывая: 1. Он существует, что проверено с помощью Привода. 2. У приложения есть разрешение на доступ к файлу, и если это не так, было бы сообщено сообщение Toast. 3. Файл был создан несколько месяцев назад, поэтому кеш был очень актуальным. Я очень уверен, что я делаю что-то неправильно, но не знаю, что. Спасибо, в любом случае! – Sriram

+0

Привод Google для Android поддерживает только доступ к области FILE, поэтому при запросе на корпус пользователя приложение будет возвращать только файлы, к которым приложение имеет доступ. Он не возвращает тост или любую ошибку, потому что, если приложение не имеет доступа к файлу, недопустимо раскрывать тот факт, что файл существует. Обратите внимание, что если файл был создан вашим приложением, он автоматически получит к нему доступ. Таким образом, запрос, возвращающий 0 элементов при поиске файла, означает, что файл больше не существует или пользователь явно удалил доступ приложения из файла. – Shailendra

Смежные вопросы