[Resolvido] Passar o valor de getCount para a classe controller - Android

Pessoal bom dia.

Estou tentando passar o valor de getCount para a minha classe controller mas ele está indo 0

Como faço isto?

Seguem os códigos.

Meu Dao


public boolean totalDadosColeta(String idAmostra)
    {
        
        
        
        try {
            
            String[] args = new String[]{idAmostra};
            
            Cursor c = getWritableDatabase().rawQuery("SELECT * FROM INFO " +
                    "INNER JOIN AMOSTRA ON (INFOSAMOSTRA.CDAMOSTRA = AMOSTRA.CDAMOSTRA) " +
                    "INNER JOIN INFOSAMOSTRA ON (INFO.CDINFO = INFOSAMOSTRA.CDINFO) " +
                    "WHERE AMOSTRA.CDAMOSTRA = ?", args);
            
            if (c.getCount() > 0) {
                
                
                Info infoBean = new Info();
                
                infoBean.setTotalInfo(c.getCount());
                
                Log.i(CATEGORIA, "TOTAL COUNT > 0: " + c.getCount());
                return true;
                
            } else {
                
                Log.i(CATEGORIA, "TOTAL COUNT = 0: " + c.getCount());
                return false;

            }
            
            
        } catch (SQLException e) {
            
            Log.i(CATEGORIA, "Erro SQLException: " + e);
            return false;
            
        }
    
    }

 
[/code][code]


Meu controller




package br.com.mylims.controller;

import br.com.mylims.model.ColetaDao;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import br.com.mylims.bean.Info;


public class TesteCadastroColeta extends Activity{
    
    private static final String CATEGORIA = "coleta";
    
    private static ColetaDao coletaDao;
    
    private Info infoBean = new Info();
    
    public void onCreate(Bundle icicle){
        
        super.onCreate(icicle);
        
        coletaDao = new ColetaDao(this);
        
        Bundle extras = getIntent().getExtras();
        
        String idAmostra = extras.getString("idAmostra");
        
        Log.i(CATEGORIA, "idamostra TESTE: " + idAmostra);
        
        
        try {
            
            
            if (coletaDao.totalDadosColeta(idAmostra)) {
                
                
                int testeTotal = infoBean.getTotalInfo();
                
                Log.i(CATEGORIA, "TESTE TOTAL: " + testeTotal);
                
                Log.i(CATEGORIA, "DAO OK:!");
            }
            else
            {
                Log.i(CATEGORIA, "DAO ERRADO!");
                
            }
            
            
        } catch (Exception e) {
            
            
            Log.i(CATEGORIA, "ERRO CLASSE TesteCadastroColeta: " + e);
        }
        
        
    }
    
    
}

Att.

Mas como assim?

Por que não declara um atributo que recebe esse inteiro

c.getCount()

e cria getter e setter dele?~

int valor;

public void setValor(int valor){
  this.valor = valor;
}

public int getValor(){
  return this.valor;
}

E no controller

coletaDao = new ColetaDao(); 
//lógica
int valor = coletaDao.getValor();

Bom dia irmão, valeu pela força.

Criei deste forma.

Dao

[code]

Info infoBean = new Info();
infoBean.setTotalInfo(c.getCount());[/code]

Controller

A minha classe Info possui o getTotalInfo e o setTotalInfo.

Já não deveria funcionar?

Att

Ainda não entendi como você está tentando fazer isso.
Nem mesmo, por que necessita disto

coletaDao = new ColetaDao(this);  

Por que precisa passar o controller para o model?

Depois, isso aqui no controller

private Info infoBean = new Info();   

e isso no DAO

Info infoBean = new Info();   
infoBean.setTotalInfo(c.getCount());  

Criam dois objetos distintos.
A não ser que este objeto fosse injetado, através do Spring, por exemplo.

Considerando que são objetos distintos (um no controller, outro no model), a chamada

int testeTotal = infoBean.getTotalInfo();  

no Dao é inútil.
O que você pode fazer é, no controller

InfoBean ib = coletaDao.getInfoBean();
int testeTotal = infoBean.getTotalInfo();  

Aí sim irá funcionar

Tenho uma listagem que possue n Amostras.

Cada amostra possui um determinado número de informações.

Estas informações serão utilizadas para criar um formulário dinâmico.

Quero este Count para pegar o total de informações que cada amostra contém e criar o formulário.

Exemplo. Count Total 5 - vou criar um for até 5 posições.

Terei que carregar um formulário com 5 campos.

Entendeu?

Vou tentar fazer como me falou e já posto.

Irmão,

tentei fazer e não deu certo.

Eu não preciso instanciar um objeto no Dao para setar os objetos?

alterei este código

Meu método DAO


public boolean totalDadosColeta(String idAmostra)
	{
		
		
		
		try {
			
			String[] args = new String[]{idAmostra};
			
			Cursor c = getWritableDatabase().rawQuery("SELECT * FROM INFO " +
					"INNER JOIN AMOSTRA ON (INFOSAMOSTRA.CDAMOSTRA = AMOSTRA.CDAMOSTRA) " +
					"INNER JOIN INFOSAMOSTRA ON (INFO.CDINFO = INFOSAMOSTRA.CDINFO) " +
					"WHERE AMOSTRA.CDAMOSTRA = ?", args);
			
			if (c.getCount() > 0) {
				
				
				Info infoBean = new Info();
				
				infoBean.setTotalInfo(c.getCount());
				
				return true;
				
			} else {
				
				Log.i(CATEGORIA, "TOTAL COUNT = 0: " + c.getCount());
				return false;

			}
			
			
		} catch (SQLException e) {
			
			Log.i(CATEGORIA, "Erro SQLException: " + e);
			return false;
			
		}
	
	}

Controller


package br.com.mylims.controller;


import br.com.mylims.model.ColetaDao;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TesteCadastroColeta extends Activity{
	
	private static final String CATEGORIA = "coleta";
	
	ColetaDao coletaDao = new ColetaDao(this);
	
	private int infoBean; 
	
	
	public void onCreate(Bundle icicle){
		
		super.onCreate(icicle);
		
		Bundle extras = getIntent().getExtras();
		
		String idAmostra = extras.getString("idAmostra");
		
		Log.i(CATEGORIA, "idamostra TESTE: " + idAmostra);
		
		try {
			
			if (coletaDao.totalDadosColeta(idAmostra)) {
				
				//como pegar aqui o total aqui
				
			}
			else
			{
				Log.i(CATEGORIA, "DAO ERRADO!");
				
			}
			
		} catch (Exception e) {
			
			
			Log.i(CATEGORIA, "ERRO CLASSE TesteCadastroColeta: " + e);
		}
		
		
		
		
	}
	
	
}

Meu Bean


package br.com.mylims.bean;

public class Info {
	
	private int codInfo;
	private String nomeInfo;
	private int codTipoDado;
	private int totalInfo;
	
	
	public int getTotalInfo() {
		return totalInfo;
	}
	public void setTotalInfo(int totalInfo) {
		this.totalInfo = totalInfo;
	}
	public int getCodInfo() {
		return codInfo;
	}
	public void setCodInfo(int codInfo) {
		this.codInfo = codInfo;
	}
	public String getNomeInfo() {
		return nomeInfo;
	}
	public void setNomeInfo(String nomeInfo) {
		this.nomeInfo = nomeInfo;
	}
	public int getCodTipoDado() {
		return codTipoDado;
	}
	public void setCodTipoDado(int codTipoDado) {
		this.codTipoDado = codTipoDado;
	}
	@Override
	public String toString() {
		return "Info [codInfo=" + codInfo + ", nomeInfo=" + nomeInfo
				+ ", codTipoDado=" + codTipoDado + ", totalInfo=" + totalInfo
				+ "]";
	}
	

}

Camarada, não sei qual a tua base de java, mas tem alguma coisa aí que não está certa.

Instanciar objetos, sim, agora, passar todo o controller, não. O DAO deve, apenas, implementar a lógica referente à persistência.
Validação e todo o resto, fica no controller.
Você pode passar tudo o que precisar de informação no DAO e que não se refira ao processo de persistência em si ou venha da view, através da controller.

Por exemplo, se precisa pegar valor de algo na tela, você cria uma variável no controller e depois repassa, como parâmetro, ao DAO.

O problema é que você ainda mantém o InfoBean como variável do método e não do objeto (não utiliza getter/setter).
Eu faria assim

//DAO
  private Info infoBean; 
public boolean totalDadosColeta(String idAmostra)   
    {   
           
           
           
        try {   
               
            String[] args = new String[]{idAmostra};   
               
            Cursor c = getWritableDatabase().rawQuery("SELECT * FROM INFO " +   
                    "INNER JOIN AMOSTRA ON (INFOSAMOSTRA.CDAMOSTRA = AMOSTRA.CDAMOSTRA) " +   
                    "INNER JOIN INFOSAMOSTRA ON (INFO.CDINFO = INFOSAMOSTRA.CDINFO) " +   
                    "WHERE AMOSTRA.CDAMOSTRA = ?", args);   
               
            if (c.getCount() > 0) {   
                   
				setInfoBean(new Info());
				
				getInfoBean().setTotalInfo(c.getCount());   
                   
                return true;   
                   
            } else {   
                   
                Log.i(CATEGORIA, "TOTAL COUNT = 0: " + c.getCount());   
                return false;   
  
            }   
               
               
        } catch (SQLException e) {   
               
            Log.i(CATEGORIA, "Erro SQLException: " + e);   
            return false;   
               
        }   
       
    }  

	public void setInfoBean(Info infoBean){
		this.infoBean = infoBean;
	}
	
	public Info getInfoBean(){
		return this.infoBean;
	}

E no controller

package br.com.mylims.controller;   
  
  
import br.com.mylims.model.ColetaDao;   
import android.app.Activity;   
import android.os.Bundle;   
import android.util.Log;   
  
public class TesteCadastroColeta extends Activity{   
       
    private static final String CATEGORIA = "coleta";   
       
    ColetaDao coletaDao = new ColetaDao(this);   
       
    private int infoBean;   
       
       
    public void onCreate(Bundle icicle){   
           
        super.onCreate(icicle);   
           
        Bundle extras = getIntent().getExtras();   
           
        String idAmostra = extras.getString("idAmostra");   
           
        Log.i(CATEGORIA, "idamostra TESTE: " + idAmostra);   
           
        try {   
               
            if (coletaDao.totalDadosColeta(idAmostra)) {   
                   
                /**
					Aqui a alteração, mas, para construir, não passo o objeto controller todo.
					Apenas o que irei utilizar em cada método
				*/
                infoBean = coletaDao.getInfoBean().getTotalInfo();
            }   
            else   
            {   
                Log.i(CATEGORIA, "DAO ERRADO!");   
                   
            }   
               
        } catch (Exception e) {   
               
               
            Log.i(CATEGORIA, "ERRO CLASSE TesteCadastroColeta: " + e);   
        }   
           
           
           
           
    }   
       
       
}  

Opa, deu certinho.

Valeu mesmo irmão.