Download e Upload com Dropbox API no Android

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

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

Download e Upload com Dropbox API no Android

Vinícius Thiengo
(2769) (7) (1)
Go-ahead
"Você tem sonhos, então a vida bate em você para saber: 'você realmente quer isso?'"
Eric Thomas
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
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

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
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