Download e Upload com Dropbox API no Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Download e Upload com Dropbox API no Android

Download e Upload com Dropbox API no Android

Vinícius Thiengo
(3539) (7)
Go-ahead
"Ninguém se importa com o que você fez ontem. O que você fez hoje para melhorar?"
David Goggins
Kotlin Android
Capa do livro Mapas Android de Alta Qualidade - Masterização Android
TítuloMapas Android de Alta Qualidade - Masterização Android
CategoriasAndroid, Kotlin, Masterização, Especialização
AutorVinícius Thiengo
Edição
Ano2020
Capítulos11
Páginas166
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa, blz?

Nesse vídeo dou continuidade a série de vídeos sobre a Dropbox API no android, dessa vez mostrando como realizar o upload de arquivos da APP para os servidores do Dropbox (note que sempre utilizei uma imagem jpg como exemplo, mas o outros tipos de arquivos podem ser utilizados sem alteração no código de envio do exemplo), como realizar o upload para atualização de uma arquivo já existente no Dropbox, como realizar o download de uma arquivo do Dropbox e por fim como deletar um arquivo específico e como deletar um diretório no Dropbox.

Fique atento quanto ao uso de uma Thread secundário para evitar a exception de conexão na Web dentro da Thread principal, em uma parte do vídeo (method delete()) acabei esquecendo de colocar e a exception ocorreu, é até bom para você já visualizar que até mesmo um simples método que acessa o Dropbox precisa estar em uma outra Thread. Note a vantagem do uso de um ProgressListener para informar o usuário a que pé está a porcentagem de envio ou carregamento de conteúdo do Dropbox. Note também que é sim possível realizar a atualização de um arquivo já existente no Dropbox pelo método putFile(), mas optei pelo método putFileOverwrite() qu especifo para esse tipo de tarefa. Então é isso, vou deixar você o vídeo.

O link para download do projeto se encontra logo abaixo no post.

Segue link da vídeo aula anterior da série:

Iniciando com Dropbox API no Android

Segue links de vídeos que podem lhe ajudar a compreender melhor o vídeo:

Entendendo a Thread Principal de Uma APP Android

Utilizando a Câmera do Smartphone em Sua APP Android

Acessando Imagens do SDCard e Colocando na APP Android

Segue links das páginas apresentadas no vídeo:

Página de documentação da classe DropboxAPI

Página de documentação da classe ProgressListener

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Volley no Android, Entendendo e UtilizandoVolley no Android, Entendendo e UtilizandoAndroid
ORMLite no Android, Entendendo e UtilizandoORMLite no Android, Entendendo e UtilizandoAndroid
Drag e Drop no Android, Entendendo e UtilizandoDrag e Drop no Android, Entendendo e UtilizandoAndroid
Iniciando com Dropbox API no AndroidIniciando com Dropbox API no AndroidAndroid

Compartilhar

Comentários Facebook

Comentários Blog (7)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Marcelo França (1) (0)
01/08/2017
Thiengo, blz?
Estou conseguindo enviar uma foto para dropbox normalmente utilizando o android studio, mas preciso enviar várias fotos usando um SQLite apontando o caminho de nome da foto. As fotos estão na pasta PICTURES DO celular.o loop muda a variavel caminho e nomefoto. Eu coloquei uma estrutura de repetição.
Resultado: de 5 fotos para enviar ele só envia a última foto do loop e 5 vezes.
Veja o código do botão clique:

          botaoFoto.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (!txtcliente.getText().toString().equals("")) { // verifica se cliente foi informado

                        cliente = txtcliente.getText().toString();

                        banco = openOrCreateDatabase("marcelo", MODE_PRIVATE, null);
                        Cursor cursor = banco.rawQuery("SELECT * FROM clientes WHERE poliza = '" + cliente + "' ", null); // o cliente informado tem 5 fotos apontadas

                        int indiceColunaNomeFoto = cursor.getColumnIndex("nome_foto");
                        int indiceColunaCaminhoFoto = cursor.getColumnIndex("caminho_foto");

                    cursor.moveToFirst();

                    if (cursor.getCount() != 0) {
                        if (cursor.moveToFirst()) {
                            do { // inicio do loop

                                nomefoto = cursor.getString(indiceColunaNomeFoto);
                                caminho = cursor.getString(indiceColunaCaminhoFoto);

                         // codigo do especialista Thiengo upload com dropbox
                        botaoFoto.setText("Enviando...");
                        botaoFoto.setEnabled(false);

                        new Thread(){ // thread secundária
                                public void run(){
                                    try {
                                        try {
                                        dropboxAPI.metadata("/Fotos",0,null,false,null);
                                    }
                                    catch (DropboxServerException e) {

                                            dropboxAPI.createFolder("/Fotos");

                                        }

                                        DropboxProgressListener dpl = new DropboxProgressListener(botaoFoto);

                                    File file = new File(Environment.getExternalStorageDirectory(), caminho + "/" + nomefoto);
                                        FileInputStream is = new FileInputStream(file);
                                        DropboxAPI.Entry response =  dropboxAPI.putFile("/Fotos/"+nomefoto,is ,file.length(),null,dpl); // criar pasta nome do tecnico no drop
                                        Log.i("Script","Revisão Hash: "+response.rev);

                                    }
                                        catch (DropboxException e) {
                                            e.printStackTrace();
                                        } catch (FileNotFoundException e) {
                                        e.printStackTrace();
                                    }

                                    runOnUiThread(new Runnable() {
                                            @Override
                                            public void run() {
                                                botaoFoto.setText("Enviar Fotos");
                                                botaoFoto.setEnabled(true);

                                            }
                                        });

                                    }

                        }.start();

                            } while (cursor.moveToNext());
                        }
                    }
                    banco.close();
                    } else {
                        Toast.makeText(getApplicationContext(), "INFORME UM CLIENTE!", Toast.LENGTH_LONG).show();
                    }
                }
            });


Porque ele só envia a última foto do loop?
Estranho.

Forte abraço.
Responder
Vinícius Thiengo (1) (0)
02/08/2017
Marcelo, tudo bem aqui.

Primeiro, certifique-se de que no SQLite realmente há nomes distintos de fotos, que não são todos os mesmos.

Depois, em código de loop, verifique se os cinco diferentes nomes é que estão sendo obtidos do SQLite. Utilize o LogCat para isso: http://www.thiengo.com.br/entendendo-e-utilizando-o-a-classe-log-com-o-logcat-no-android

Se mesmo depois das verificações você confirmar que está tudo ok, o que recomendo é que muda a lógica de negócio que está sendo utilizada, pois a princípio a API do DropBox, por estar recebendo solicitações simultâneas, pode estar alterando os dados dos envios ainda não ocorridos para utilizar o último dado enviado a interface da API.

Devido a isso, tente a seguinte lógica:

- Coloque todo o algoritmo de acesso aos dados do cursor, o que está dentro do loop, em um método separado;

- Invoque este novo método dentro do listener de click do botaoFoto;

- Não mais utilize um framework de loop, em seu caso o do?while;

- Crie um AsyncTask onde o novo método também será invocado nele, porém no método onPostExecute(). Caso não conheça essa API Android, entre no link a seguir: http://www.thiengo.com.br/asynctask-no-android-acesso-a-thread-principal-de-forma-otimizada

- A variável cursor deverá ser uma variável de instância para que o método moveToNext() possa ser utilizado no método onPostExecute() do AsyncTask, isso para saber será necessária ou não a invocação do novo método;

- O código principal do AsyncTask, no método doInBackground(), será o de envio de foto ao DropBox;

- O acionamento do AsyncTask se dará dentro do novo método, o que também acessa os dados do cursor. Logo, não deixe de trabalhar corretamente o varargs do doInBackground para passar os argumentos corretos.

Marcelo, tente assim com o AsyncTask, pois com esse novo algoritmo um envio somente ocorrerá se o anterior tiver finalizado.

Abraço.
Responder
Marcelo França (2) (0)
03/08/2017
Thiengo, muito obrigado!
Consegui colocando o do-while dentro da thread, assim ele consegue finalizar o anterior antes de iniciar para o próximo registro.
Abraço
Marcelo França
Responder
Jairo Souza (1) (0)
28/04/2016
E ai thiengo, muito boa tuas aulas, cara eu to atrás de um modo de enviar arquivos (PDF, TXT )para um servidor Php, tem alguma Api para fazer isso? qual seria o melhor modo ao seu ver, obrigado desde já!
Responder
Vinícius Thiengo (1) (0)
29/04/2016
Fala Jairo, blz?
Veja se essa resposta lhe ajuda (http://stackoverflow.com/a/28938263/2578331 ). Outra opção é utilizar o Retrofit 2.0 para envio de dados (http://www.thiengo.com.br/library-retrofit-2-no-android ). Abraço
Responder
Jairo Souza (2) (0)
29/04/2016
Bah isso ajuda muito sim, vlw cara, eu tinha visto a aula de que vc usou o Retrofit 2, vlw continue suas aulas ajuda muita gente obg.
Responder
Rodrigo (5) (0)
26/08/2014
Oi thiengo blz? ensina nós a criar chat para android? suas aulas são muito boas, Vlw ;)
Responder