REVELAR

Fórum Ajuda em aplicativo! #515518

01/04/2015

0

Estou tentando desenvolver um aplicativo parecido com uma rede social, e estou em duvida sobre como instanciar automaticamente os objetos da classe dos clientes que sao cadastrados no aplicativo, se alguem souber como posso fazer isso, ou puder me dar quaisquer dicas sobre uma aplicação desse tipo me ajudaria muito.

Desde já obrigado!
Charles Campista

Charles Campista

Responder

Posts

01/04/2015

Aldair Gomes

como assim? " instanciar automaticamente os objetos da classe dos clientes"?
Responder

Gostei + 0

01/04/2015

Italo Junior

Charles, desconheço tambem o "instanciar automaticamente".
Responder

Gostei + 0

02/04/2015

Aldair Gomes

se vc tem uma Classe tipo


public class Cliente(){
private String nome

//getter and setter
}

se for isso e vc quer instanciar isso dinamicamente essa classe dá.

usa esse metodo


public Object retornaClasse(String nomeClasse) {
try {
return (Class.forName(nomeClasse)).newInstance();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}


//usando

MyClasse mc = (MyClasse) retornaClasse("MyClasse");
mc.getNome();
Responder

Gostei + 0

02/04/2015

Charles Campista

Não sei explicar direito, e não sei usar muito bem estes termos da linguagem java, mas vou tentar.

1 - Imagine que uma pessoa fosse se cadastrar no aplicativo ao clicar no botão cadastrar.
2 - seria preciso que fosse criado um objeto para esta pessoa,
3-(X da questão), Como eu poderia criar esse objeto sem digitar código. //automaticamente = sem digitar código.



tentei fazer um método criaUsuario() que cria o usuário e adiciona-o a um array list onde ficam armazenados todos os usuários cadastrado, mas mesmo assim eu teria que escrever o nome das variáveis criada nesse método. (O que gera outra pergunta).

em java há como criar variáveis automaticamente "sem digitar código" com nomes diferentes?

//por exemplo um laço de repetição que cria variáveis e da um nome diferente a cada variável.








RESUMINDO TODO ESTE TEXTO: quero que o usuário clique em um cadastra e seja incluso na minha aplicação.
//quero que seja criado um objeto com o nome diferente para cada usuário ao clicar de um botão




Ufa!! esse foi f*** pra explicar!
Responder

Gostei + 0

02/04/2015

Aldair Gomes

Charles,

Com orientação a Objetos não é assim.
Sabe utilizar conceito e praticas da Orientação a Objetos??

Se souber, eu Desenvolvi uma Classe que faz o cadastro "automagicamente" porém precisa entende-la pra utilizar...

Att.
Responder

Gostei + 0

02/04/2015

Charles Campista

Legal Aldair voce pederia postar aki o codigo fonte desta classe?
tenho algumas duvidas mais consigo entender um pouco sim!
Responder

Gostei + 0

02/04/2015

Aldair Gomes


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

import android.widget.TextView;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;



/**
 * Created by Aldair Natan B. N. Gomes on 24/03/2015.
 */
public class GetValuesFromLayout{

    private Context context;
    private ViewGroup view;
    private Object classe;
	//coloca-se  caminho de onde ficam as classes modelos...
	private static PACOTECLASSE = "mypackage.";
	
    public Object getAllChildElements(Object obj, String nomeClasse) {
        try {
            View v = null;
            this.view = (ViewGroup) obj;

            //Instancia a Classe passada por parãmetro
            this.classe = retornaClasse(nomeClasse);

            //Cria um Array de Filds da classe
            Field[] f = this.classe.getClass().getDeclaredFields();

            //obtem todos os metodos da Classe
            Method[] m = this.classe.getClass().getDeclaredMethods();

            Class cls = Class.forName(PACOTECLASSE + nomeClasse);

            //obtem todos os componentes de tela do Painel Passado por parametro
            for (int i=0; i < this.view.getChildCount(); i++) {
                if (this.view.getChildAt(i) instanceof EditText) {
                    v = this.view.getChildAt(i);

                    EditText text = (EditText) this.view.findViewById(v.getId());

                    for (int j = 0; j < f.length; j++) {
                        if (v.getTag().equals(f[j].getName())) {
                            String nomeAtributo = f[j].getName().toString();
                            for (int k = 0; k < m.length; k++) {
                                if (m[k].getName().equals("set" + primeiraMaiuscula(nomeAtributo))) {
                                    Method metodo = cls.getMethod("set" + primeiraMaiuscula(nomeAtributo), m[k].getParameterTypes());
                                    metodo.invoke(this.classe, text.getText().toString());
                                    break;
                                }//if
                            }//if
                        }//if
                    }//for
                }else if(this.view.getChildAt(i) instanceof ViewGroup){

                    ViewGroup vg  = (ViewGroup) this.view.getChildAt(i);

                    for (int l = 0; l < vg.getChildCount(); l++) {
                        if (vg.getChildAt(l) instanceof EditText) {
                            v = vg.getChildAt(l);

                            EditText text = (EditText) vg.findViewById(v.getId());

                            for (int j = 0; j < f.length; j++) {
                                if (v.getTag().equals(f[j].getName())) {
                                    String nomeAtributo = f[j].getName().toString();
                                    for (int k = 0; k < m.length; k++) {
                                        if (m[k].getName().equals("set" + primeiraMaiuscula(nomeAtributo))) {
                                            Method metodo = cls.getMethod("set" + primeiraMaiuscula(nomeAtributo), m[k].getParameterTypes());
                                            if(f[j].getType().equals(String.class)) {
                                                System.out.println("entrou");
                                                metodo.invoke(this.classe, text.getText().toString());
                                            }else if(f[j].getType().equals(int.class)){
                                                metodo.invoke(this.classe, Integer.parseInt(text.getText().toString()));
                                            }else if(f[j].getType().equals(Double.class)){
                                                metodo.invoke(this.classe, Double.parseDouble(text.getText().toString()));
                                            }else if(f[j].getType().equals(Boolean.class)){
                                                metodo.invoke(this.classe, Boolean.parseBoolean(text.getText().toString()));
                                            }else if(f[j].getType().equals(Float.class)){
                                                metodo.invoke(this.classe, Float.parseFloat(text.getText().toString()));
                                            }
                                            break;
                                        }//endif
                                    }//endfor
                                }//endif
                            }//endfor
                        }//endif
                    }//endfor
                }//endif
            }//endfor
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return this.classe;
    }

    public static String primeiraMaiuscula(String palavra) {
        return palavra.substring(0, 1).toUpperCase() + palavra.substring(1);
    }

    public Object retornaClasse(String nomeClasse) {
        try {
            return (Class.forName(PACOTECLASSE + nomeClasse)).newInstance();
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

}



pra usar vc passa o nome do Layout principal e o nome da sua Classe em string.

obs.: Funciona apenas em campo de texto. A Tag do component EditText deve ser o mesmo nome do atributo da classe.

exemplo:


 final View promptView = layoutInflater.inflate(R.layout.activity_cadastro_cliente, null);
//instancia a classe GetValuesFromLayout 
GetValuesFromLayout getValues = new GetValuesFromLayout();
//instancia a classe neste exemplo no caso Cliente
Cliente c = (Cliente) getValues.getAllChildElements(promptView ,"Cliente");
ClienteDAO dao = new CliforDAO(this);
dao.inserir(c);




Exemplo do EditText

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25px"
        android:tag="nome" //aki coloca o mesmo nome do atributo da classe.
        android:id="@+id/nomeCliente"/>


è isso...
Responder

Gostei + 0

02/04/2015

Charles Campista

Obrigado Aldair seu codigo fonte vai me ajudar muito.

algumas bibliotecas aqui eu não conheço mais isso é questão de tempo.
Obrigado!
Responder

Gostei + 0

02/04/2015

Aldair Gomes

Opa que bom que vai ajudar...
Qualquer dúvida, estou a disposição...
Responder

Gostei + 0

03/04/2015

Ronaldo Lanhellas

Estou tentando desenvolver um aplicativo parecido com uma rede social, e estou em duvida sobre como instanciar automaticamente os objetos da classe dos clientes que sao cadastrados no aplicativo, se alguem souber como posso fazer isso, ou puder me dar quaisquer dicas sobre uma aplicação desse tipo me ajudaria muito.

Desde já obrigado!


Creio que você esteja se referindo a injeção de dependências (instanciar automaticamente) e isso pode ser feito com CDI ou Spring: https://www.devmedia.com.br/injecao-de-dependencias-em-java-com-jsr-330-e-spring/27948
Responder

Gostei + 0

03/04/2015

Ronaldo Lanhellas

Estou tentando desenvolver um aplicativo parecido com uma rede social, e estou em duvida sobre como instanciar automaticamente os objetos da classe dos clientes que sao cadastrados no aplicativo, se alguem souber como posso fazer isso, ou puder me dar quaisquer dicas sobre uma aplicação desse tipo me ajudaria muito.

Desde já obrigado!


Creio que você esteja se referindo a injeção de dependências (instanciar automaticamente) e isso pode ser feito com CDI ou Spring: https://www.devmedia.com.br/injecao-de-dependencias-em-java-com-jsr-330-e-spring/27948
Responder

Gostei + 0

03/04/2015

Charles Campista

Obrigado Ronaldo essa é uma boa materia!
Responder

Gostei + 0

04/04/2015

Ronaldo Lanhellas

Disponha.
Responder

Gostei + 0

04/04/2015

Ronaldo Lanhellas

Disponha.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar