2015-08-01 3 views
2

У меня возникли проблемы с интеграцией диска Google в мое приложение для Android.Ошибка Google Android для Google Диска

Я хотел бы иметь возможность загружать, загружать и просматривать файлы.

До сих пор я просто пытаюсь получить список файлов с использованием Java API для диска, так как Google говорит, что он более гибкий.

Я подключение к Google Drive, как так:

googleAccountCredential = GoogleAccountCredential.usingOAuth2(getActivity(), Arrays.asList(DriveScopes.DRIVE)); 
    googleAccountCredential.setSelectedAccountName(Arrays.asList(DriveScopes.DRIVE).get(0)); 
    //startActivityForResult(googleAccountCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 
    driveService = getDriveService(googleAccountCredential); 

И после того, что я пытаюсь получить список файлов:

private List<File> retrieveAllFiles(Drive service) throws IOException { 
    List<File> result = new ArrayList<File>(); 
    Files.List request = service.files().list().setQ("trashed = false"); 
    this.logMessage("Attempting to get files"); 
    this.logMessage("Size of reply is: "+request.size()); 
    do { 
     try { 
      FileList files = request.execute(); 
      result.addAll(files.getItems()); 
      request.setPageToken(files.getNextPageToken()); 
      this.logMessage("Got files. Size is: " + result.size()); 
     } catch (IOException e) { 
      this.logMessage("Error: " + e); 
      request.setPageToken(null); 
     } 
    } while (request.getPageToken() != null && 
      request.getPageToken().length() > 0); 

    return result; 
} 

Это ошибка дает:

Process: com.some.package, PID: 12439 
java.lang.IllegalArgumentException: the name must not be empty: null 
     at android.accounts.Account.<init>(Account.java:48) 
     at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
     at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:255) 
     at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:279) 
     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
     at com.some.package.Thing.DriveManager.retrieveAllFiles(DriveManager.java:144) 
     at com.some.package.Thing.DriveManager.loadAccount(DriveManager.java:121) 
     at com.some.package.Thing.DriveManager.onCreateView(DriveManager.java:95) 
     at android.app.Fragment.performCreateView(Fragment.java:2053) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
     at android.app.BackStackRecord.run(BackStackRecord.java:834) 
     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5289) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
+0

Я испытываю тот же вопрос, вам удалось решить эту проблему? –

ответ

0

Я забыл, что именно не так, поэтому перечислил весь процесс так, как я это делаю.

Сначала проверьте, есть ли счет в SharedPrefrences

SharedPreferences settings = fragment.getActivity().getPreferences(Context.MODE_PRIVATE); 
    googleAccountCredential = GoogleAccountCredential.usingOAuth2(
      fragment.getActivity().getApplicationContext(), Arrays.asList(SCOPES)) 
      .setBackOff(new ExponentialBackOff()) 
      .setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

Если нет учетной записи, имя, возвращенное settings.getString(PREF_ACCOUNT_NAME будет нулевым.

Так называют счет выбора метода

private void chooseAccount() { 
    fragment.getActivity().startActivityForResult(googleAccountCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 
} 

В onActivityResult мы проверяем.

if (resultCode == Activity.RESULT_OK && data != null && 
        data.getExtras() != null) { 
       String accountName = 
         data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
       if (accountName != null) { 
        credential.setSelectedAccountName(accountName); 
        SharedPreferences settings = 
          getPreferences(Context.MODE_PRIVATE); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putString(PREF_ACCOUNT_NAME, accountName); 
        editor.commit(); 
       } 
      } 

Теперь у вас есть счет, который вам нужен, но должен авторизовать его.

Я не нашел другого способа запуска действия авторизации, кроме списка файлов, используя описанный выше метод, но попытка будет немного отличаться.

Вы также должны поймать

catch (UserRecoverableAuthIOException e){ 
           fragment.getActivity().startActivityForResult(e.getIntent(), 
REQUEST_AUTHORIZATION); 
} 

После этого приложение должно иметь полный доступ к Google Drive.

, если вы все еще возникают проверки неисправности этой link

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