Bom dia!
Já programo a muito tempo ( uns 10 anos rs ), mas sou iniciante em android, alem de um completo desastre rs.
Estou tentando montar algumas funcoes de comunicacao com FTP com a lib do apache ftp client, mas estou penando, alguem tem algum ex de comunicacao, com conexao, upload e download e poderia me ajudar?
Obrigado!
Primeiro resultado do google foi esse tuturial.
Veja se ele pode te ajudar, caso tenha duvidas nao exite em postar aqui.
1 curtida
Obrigado, fiz esse, porem nao funcionou, entrei em contato com o thiago, me mandou o cod, mas tambem, não consegui fazer funcionar. no inicio postei aqui e me indicaram utilizar as threds, pois as chamadas estavam direta ( modo ativo ) e por isso sempre acionava uma exception, resolveu a exception, mas ainda nao conecta rs
Onde é o server ftp?
voce colocou a permissao de conexao a internet?
http://pt.androids.help/q24561
Boa noite Will,
Segue abaixo um código funcional para baixar arquivos do FTP. Ele está meio esquisito em alguns lugares pois adaptei de um código que eu havia feito. Mas creio que serve como base e vc pode adaptar as suas necessidades. Att.
Edit: Lembrando também de colocar as permissões no manifesto:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.STORAGE" />
public class AtualizacaoView extends AppCompatActivity {
ProgressDialog dialog;
boolean isOk = false;
boolean baixouArquivo = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_atualizacao_view);
}
//Botao da tela para simular alguma chamada
public void btnOnClick(View view){
isOk = true;
chamaThreadFtp();
}
//Cria nova thread
private void chamaThreadFtp(){
dialog = ProgressDialog.show(this, "Titulo", "Mensagem....",false,true);
dialog.setCancelable(false);
new Thread(){
@Override
public void run(){
try{
conectaFtp();
}catch (Exception e){}
}
}.start();
}
private void conectaFtp(){
String strUrl = "192.168.100.1";
String strPorta = "20";
int porta = 0;
try{
porta = Integer.parseInt(strPorta);
}catch(Exception e){
//Erro na porta
isOk = false;
}
if (isOk) {
FTPClient con = null;
try {
con = new FTPClient();
con.connect(strUrl, porta);
if (con.login("usuario", "senha")) {
con.enterLocalPassiveMode();
con.setFileType(FTP.BINARY_FILE_TYPE);
String diretorio = "/DiretorioDoFtp/aaaa/bbb/";
if(!checkDirectoryExistsAtt(diretorio, con)){
//Diretorio nao existe
isOk = false;
}
if(isOk) {
//Lista os arquivos do diretório
FTPFile[] arquivos = con.listFiles();
if(arquivos != null){
int length = arquivos.length;
for(int i = 0; i < length; ++i){
FTPFile f = arquivos[i];
if(f.isFile()){
String nomeArquivo = f.getName();
//Lista os arquivos do ftp
nomeArquivo = nomeArquivo.trim();
//Download do arquivo
baixaArquivo(con, nomeArquivo);
}
}
}else{
//Não há arquivos no diretório
}
}
con.logout();
con.disconnect();
}else {
//Senha-usuário inválido
}
} catch (Exception e) {
//Alguma Exception
}
}
finalizaFtp();
}
private void baixaArquivo(FTPClient con2, String nomeArquivo) {
OutputStream outputStream = null;
try{
String diretorioAndroid = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
String fileName = nomeArquivo;
diretorioAndroid += fileName;
final Uri uri = Uri.parse("file://" + diretorioAndroid);
File file = new File(diretorioAndroid);
//Diretório do arquivo no ftp
String diretorio2 = "/DiretorioDoFtp/aaaa/bbb/"+nomeArquivo;
outputStream = new BufferedOutputStream(new FileOutputStream(file));
//Retorna true ou false se o arquivo foi baixado com sucesso
baixouArquivo = con2.retrieveFile(diretorio2, outputStream);
}catch(Exception e){
//Alguma exception de download
} finally {
if (outputStream != null) {
try {
outputStream.close();
}catch(Exception e){}
}
}
}
private void finalizaFtp(){
runOnUiThread(new Runnable(){
@Override
public void run(){
if(dialog != null) {
dialog.dismiss();
}
Toast.makeText(getContext(), "Concluído", Toast.LENGTH_LONG).show();
}
});
}
private boolean checkDirectoryExistsAtt(String dirPath, FTPClient ftpClient) throws IOException {
boolean retorno = true;
try {
ftpClient.changeWorkingDirectory(dirPath);
int returnCode = ftpClient.getReplyCode();
if (returnCode == 550) {
retorno = false;
}
}catch (Exception e){
retorno = false;
}
return retorno;
}
private Context getContext(){
return this;
}
}
cara, Muito obrigado! vou testar agora!