Eu implementei o Google Drive em meu aplicativo Android e funciona muito bem, mas estou tentando descobrir uma maneira de executar um upload / download em um thread de fundo para que eu possa deixar uma atividade e fazer outra coisa no meu aplicativo . O problema é que a unidade precisa da referência de atividade em caso de exceções, como UserRecoverableAuthIOException
.
Aqui está a questão que não consigo entender. Aqui está um código try / catch:
try { //...drive api stuff here } catch (UserRecoverableAuthIOException e) { possibleException = e; try { e.getIntent(); } catch ( NullPointerException e2 ) { //this is the crazy part // e.getIntent() should not throw a nullpointer e2.printStackTrace(); possibleException = e2; } onActivityRestartWhat = RESTART_IMPORT; // just a note i do handle this exception properly in another section of a code when there is an intent. } catch (FileNotFoundException e) { possibleException = e; e.printStackTrace(); } catch (IOException e) { possibleException = e; e.printStackTrace(); }
O que eu não consigo entender é por que o UserRecoverableAuthIOException
está lançando um soro do NullPointerException
eu tento acessar o getIntent
.
Eu pego UserRecoverableAuthIOException
quando mais autenticação é necessária e solicito através do método startActivityForResult
. Além disso, essa exceção é lançada somente se eu desistir da atividade iniciada, também conhecida como destruir a atividade. Basicamente, eu tenho um processo que faz o upload / download de arquivos da unidade em um thread e se eu não deixar a atividade até a conclusão funcionar, se eu destruir a atividade através do botão voltar, eu recebo essa exceção.
07-10 14:45:32.903: W/System.err(1450): java.lang.NullPointerException 07-10 14:45:32.913: W/System.err(1450): at android.content.Intent. (Intent.java:3529) 07-10 14:45:32.913: W/System.err(1450): at com.google.android.gms.auth.UserRecoverableAuthException.getIntent(Unknown Source) 07-10 14:45:32.913: W/System.err(1450): at com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException.getIntent(UserRecoverableAuthIOException.java:62) 07-10 14:45:32.913: W/System.err(1450): at my.app.DriveHelper$2.run(DriveHelper.java:211)
Eu quero executar downloads / uploads (via google drive) em um segmento de fundo. Como o sdk requer startActivityForResult
e outros methods que podem exigir uma referência a uma Activity
ou Context
que dificulte isso, mas deve funcionar assim que o aplicativo receber as permissions sdk que exigem essas referências. Espero que isso faça sentido.
Abaixo estão as etapas que você pode seguir para lidar UserRecoverableAuthIOException
exceção UserRecoverableAuthIOException
corretamente e você pode até mesmo evitar essa exceção quando voltar pressionado.
Em alguns casos, se você está recebendo esse erro, significa que a atividade é destruída, portanto, você não deve depender da atividade
com.google.api.services.tasks.Tasks
do Context
of Service
não de qualquer Activity
diretamente como mostrado em ‘tasks-android-sample’ Quando você começa Exception
Você precisa mostrar uma notificação com PendingIntent
do Service
PendingIntent
deve conter a referência a uma atividade, por exemplo, HomeActivity
A atividade deve lidar com a intenção extra e deve fazer as coisas necessárias, como mostrar a checkbox de diálogo Selecionar conta
você pode passar pelo exemplo de código aqui (GoogleTasksService)
O que você pode fazer, neste caso, não use várias atividades.
Ao mudar para vistas, você pode realizar sua tarefa.