Ajuda CheckBox dinâmico

Pessoal,

Estou precisando de uma ajuda para o seguinte caso.

Possuo uma série de nomes listados em um CheckBox. (Isto está ok).
Cada nome possui um determinado arquivo. (OK).

Dúvida.

Quero fazer o upload dos arquivos que seleciono pelo CheckBox.

Exemplo

Arquivos

[x] arquivo 01
[] arquivo 02
[x] arquivo 03
[] arquivo 04
[x] arquivo 05

(BOTÃO ENVIAR)

Ao clicar no botão enviar, ele faz o upload dos arquivos selecionados.

Por favor, alguém consegue me ajudar?

Possuo o código que faz isso com um arquivo por vez clicando no botão sem o ckeckBox.

Preciso adaptar para fazer pelo checkBox.

Seguem os dados que estou utilizando.


package br.com.mylims.controller;


import java.util.List;

import br.com.mylims.auxiliares.UploadFtp;
import br.com.mylims.bean.Amostra;
import br.com.mylims.bean.Usuario;
import br.com.mylims.model.AmostraDao;
import br.com.mylims.model.UsuarioDao;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class TelaListaAmostrasColetadasController extends Activity {

	private static final String CATEGORIA = "coleta";
	
	AmostraDao amostraDao = new AmostraDao(this);
	
	private List<Amostra> amostraBean;
	
	UsuarioDao usuarioDao = new UsuarioDao(this);
	
	public void onCreate(Bundle icicle){
		
		super.onCreate(icicle);
		
		Bundle extras = getIntent().getExtras();
		
		final String idEmpresa = extras.getString("idEmpresa");
		final String idProcesso = extras.getString("idProcesso");
		
		final String login = extras.getString("login");
		final String senha = extras.getString("senha");
		
		
		final List<Usuario> listaDadosUsuario = usuarioDao.listaDadosUsuario(login, senha);
		
		final int totalDadosUsuario = listaDadosUsuario.size();
		
		amostraBean = amostraDao.getListaAmostrasColetadas();
		
		int total = amostraBean.size();
		
		LinearLayout linearLayout = new LinearLayout(this);  
        linearLayout.setOrientation(LinearLayout.VERTICAL);  
        
        ScrollView s = new ScrollView(this);  
        s.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
                
        TextView tituloDados = new TextView(this);  
        tituloDados.setText("LISTAGEM DE AMOSTRAS COLETADAS");
        linearLayout.addView(tituloDados);
        
        TextView linha = new TextView(this);  
        linha.setText("----------------------------------------------------------------");
        linearLayout.addView(linha);
		
		for (int i = 0; i < total; i++) {
			
			final int j = i;
		
			CheckBox checkBox = new CheckBox(this);
			checkBox.setText(amostraBean.get(j).getIdAmostra());
			checkBox.setId(amostraBean.get(j).getCodAmostra());
			linearLayout.addView(checkBox);
			
            
		}
		
		TextView rodaPe = new TextView(this);  
        rodaPe.setText("----------------------------------------------------------------");
        linearLayout.addView(rodaPe);
        
        LinearLayout linearLayoutBotao = new LinearLayout(this);  
        linearLayoutBotao.setOrientation(LinearLayout.HORIZONTAL);  
          
        Button botaoEnviarFTP = new Button(this);  
        botaoEnviarFTP.setText("Enviar FTP");
        botaoEnviarFTP.setWidth(100);
        linearLayoutBotao.addView(botaoEnviarFTP);
        
        botaoEnviarFTP.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
			}
		});
        
        
        
        Button botaoVoltar = new Button(this);  
        botaoVoltar.setText("Voltar");
        botaoVoltar.setWidth(100);
        linearLayoutBotao.addView(botaoVoltar);  
        
        linearLayout.addView(linearLayoutBotao);
        
        
        
        
        
        botaoVoltar.setOnClickListener(new OnClickListener() {  
       
        	
        @Override  
        public void onClick(View v) {  
          
            finish(); 
              
        }  
              
    });
        
      
        s.addView(linearLayout);  
        
        setContentView(s);
		
		
	}
	
		
}


Método de upload FTP - OBS: este método foi feito para envio de uma arquivo por vez (sem o CheckBox).
Quero alterar para o envio dos arquivos recebendo os valores do CheckBox.


package br.com.mylims.auxiliares;

import java.io.FileInputStream;


import org.apache.commons.net.ftp.FTPClient;

import android.util.Log;

public class UploadFtp {

    
    private static final String CATEGORIA = "coleta";

    public boolean uploadFTP(String ipFTP, String loginFTP, String senhaFTP, String diretorioFTP, String diretorioAndroid, String arquivoFTP){
        
    
        try {
            
            FTPClient ftp = new FTPClient();
            
            ftp.connect(ipFTP);
            ftp.login(loginFTP, senhaFTP);
            
            ftp.enterLocalPassiveMode();
               
            ftp.setFileTransferMode(FTPClient.ASCII_FILE_TYPE);
            ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
            
            ftp.changeWorkingDirectory(diretorioFTP);
            
            FileInputStream arqEnviar = new FileInputStream( diretorioAndroid + arquivoFTP);
            
            
            if (ftp.storeFile(arquivoFTP, arqEnviar)) {
                
                ftp.logout();
                ftp.disconnect();
                
                return true;
                
            } else {
                
                ftp.logout();
                ftp.disconnect();

                return false;
            }
            
            
        } catch (Exception e) {
        
            
            Log.i(CATEGORIA, "ERRO FTP: " + e);
            return false;
            
        }
        
          
        
    }
    
    
}

Ao invés de usar um LinearLayout e adicionar Checkboxes manualmente você poderia ter criado um ListView com a opção multiple_choice. Pra saber os elementos selecionados poderia simplesmente utilizar o método getCheckedItemIds() ou getCheckedItemPositions(). Seria mais interessante.

Mas da maneira que você fez, o que você precisa é guardar uma referência para os checkboxes. Assim você pode percorrê-los posteriormente e verificar se eles estão checados ou não. Antes do for que adiciona os checkbox, inicialize um array e dentro do for armazene os checkboxes que vc precisa:

Checkbox[] checkboxes = new Checkbox[total];
for (int i = 0; i < total; i++) {			
	final int j = i;
	
	CheckBox checkBox = new CheckBox(this);
	checkBox.setText(amostraBean.get(j).getIdAmostra());
	checkBox.setId(amostraBean.get(j).getCodAmostra());
	linearLayout.addView(checkBox);
	checkboxes[i] = checkbox;            
}

Depois, no clique do botão, percorra o array e extraia os nomes do arquivos:

@Override
public void onClick(View arg0) {
	List<String> fileNames = new ArrayList<String>();
	for (CheckBox c : checkboxes) {
		if (c.isChecked()) {
			fileNames.add(c.getText());
		}
	}
}

Partindo desse ponto você já tem uma lista com todos os nomes pra enviar, basta percorrê-la na classe ftp e enviar um a um.

Falou.