Fórum Ajuda em aplicativo! #515518
01/04/2015
0
Desde já obrigado!
Charles Campista
Curtir tópico
+ 0Posts
01/04/2015
Aldair Gomes
Gostei + 0
01/04/2015
Italo Junior
Gostei + 0
02/04/2015
Aldair Gomes
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
02/04/2015
Charles Campista
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
02/04/2015
Aldair Gomes
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
02/04/2015
Charles Campista
tenho algumas duvidas mais consigo entender um pouco sim!
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...
Gostei + 0
02/04/2015
Charles Campista
algumas bibliotecas aqui eu não conheço mais isso é questão de tempo.
Obrigado!
Gostei + 0
02/04/2015
Aldair Gomes
Qualquer dúvida, estou a disposição...
Gostei + 0
03/04/2015
Ronaldo Lanhellas
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
03/04/2015
Ronaldo Lanhellas
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
03/04/2015
Charles Campista
Gostei + 0
04/04/2015
Ronaldo Lanhellas
Gostei + 0
04/04/2015
Ronaldo Lanhellas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)