Ajuda em aplicativo!
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!
Desde já obrigado!
Charles Campista
Curtidas 0
Respostas
Aldair Gomes
01/04/2015
como assim? " instanciar automaticamente os objetos da classe dos clientes"?
GOSTEI 0
Italo Junior
01/04/2015
Charles, desconheço tambem o "instanciar automaticamente".
GOSTEI 0
Aldair Gomes
01/04/2015
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();
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();
GOSTEI 0
Charles Campista
01/04/2015
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!
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!
GOSTEI 0
Aldair Gomes
01/04/2015
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.
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.
GOSTEI 0
Charles Campista
01/04/2015
Legal Aldair voce pederia postar aki o codigo fonte desta classe?
tenho algumas duvidas mais consigo entender um pouco sim!
tenho algumas duvidas mais consigo entender um pouco sim!
GOSTEI 0
Aldair Gomes
01/04/2015
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...
GOSTEI 0
Charles Campista
01/04/2015
Obrigado Aldair seu codigo fonte vai me ajudar muito.
algumas bibliotecas aqui eu não conheço mais isso é questão de tempo.
Obrigado!
algumas bibliotecas aqui eu não conheço mais isso é questão de tempo.
Obrigado!
GOSTEI 0
Aldair Gomes
01/04/2015
Opa que bom que vai ajudar...
Qualquer dúvida, estou a disposição...
Qualquer dúvida, estou a disposição...
GOSTEI 0
Ronaldo Lanhellas
01/04/2015
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!
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
GOSTEI 0
Ronaldo Lanhellas
01/04/2015
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!
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
GOSTEI 0
Charles Campista
01/04/2015
Obrigado Ronaldo essa é uma boa materia!
GOSTEI 0
Ronaldo Lanhellas
01/04/2015
Disponha.
GOSTEI 0
Ronaldo Lanhellas
01/04/2015
Disponha.
GOSTEI 0