2016-07-18 2 views
0

я получил авариюандроид AccountManager.getAccountsByType

android.os.TransactionTooLargeException android.accounts.AccountManager.getAccountsByTypeAsUser (AccountManager.java:450) android.accounts.AccountManager.getAccountsByType (AccountManager.java:441) "

, когда я с помощью getAccountsByType("com.google") получить Accouts.

Как я могу это исправить?

ответ

0

Включить в манифесте:

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

Используйте метод ниже, чтобы получить ваш счет:

public void getAccount() { 
     AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE); 
     Account[] list = manager.getAccounts(); 

     for (Account account : list) { 
      if (account.type.equals("com.google")) { 
       Log.d(TAG, "account = " + account.name); 
      } 
     } 
    } 
+0

я включал разрешение в манифесте. в чем разница между вашим методом и моим? Является ли getAccounts() лучше, чем getAccountsByType()? –

+0

getAccounts() вернет, что все учетные записи вошли в ваш телефон, если вы хотите получить конкретную учетную запись, например Google, используйте цикл для фильтрации вашего результата. Я не уверен, почему getAccountsByType() выдает ошибку, поэтому попробуйте мой метод получения учетных записей - это решение вашей проблемы. –

+0

, как известно, TransactionTooLargeException будет вызываться, если транзакция Binder слишком велика. это означает, что возвращаемое значение getAccountsByType слишком велико. Если я использую getAccounts, он вернет больше учетных записей. –