Passar valores de atributos de um objeto para uma outra classe/objeto
10 respostasResolvido
javaprogramação
R
rubenNs1
Pessoal, boa noite!
Estou quebrando a cabeça por aqui tentando passar os valores de dois atributos para uma classe/objeto distinto.
Um exemplo:
Classe Usuario fiz os getters/settes de perfil e logado.
Na classe usuário ao validar os dados de autenticação é setado os atributos perfil = 1 e logado = true;
Queria recuperar esses valores na minha main.
Acontece que se eu instanciar esse objeto/classe Usuario em uma outra classe ele vai criar um novo objeto perdendo assim os seus devidos valores.
Você não instancia um objeto, você instancia uma classe.
Um objeto é uma instância de uma classe.
Você não tem que instanciar outro usuário em outra classe, você tem que passar o usuário, que você já instanciou, para a classe que depende dele.
R
rubenNs1
Oi, boa noite!
Pode me dar um exemplo de como posso fazer isso? Obrigado.
staroski
Posta os fontes das suas classes, que fica mais fácil.
Não esqueça de usar o botão de formatção de código do fórum: “</>”
R
rubenNs1
Acabei dando uma bagunçada porque tentei recuperar os valores via banco de dados, porém não saiu como eu realmente queria.
UsuarioDAO.class
packagebr.com.icebelle.models;importbr.com.icebelle.views.Home;importbr.com.icebelle.views.Messages;importjava.sql.*;publicclassUsuarioDAO{privateConnectionconnection;privatefinalMessagesmessages=newMessages();privatefinalMenuDAOmenuDAO=newMenuDAO();publicUsuarioDAO(){try{Stringurl="jdbc:mysql://localhost:3306/icebelle_homolog_v2";Stringuser="root";Stringsenha=null;connection=DriverManager.getConnection(url,user,senha);}catch(SQLExceptionsqlException){sqlException.printStackTrace();}}publicvoidadicionarUsuarioDAO(Usuariousuario){Stringsql="insert into users(id, perfil, login, senha) values(?, ?, ?, ?)";try{PreparedStatementpreparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,usuario.getId());preparedStatement.setInt(2,usuario.getPerfil());preparedStatement.setString(3,usuario.getUsuario());preparedStatement.setString(4,usuario.getSenha());preparedStatement.executeUpdate();messages.setSuccess("\n"+usuario.getUsuario()+" cadastrado com sucesso.\n");preparedStatement.close();connection.close();}catch(SQLExceptionsqlException){messages.setFail("\nFalha: "+sqlException.getMessage()+", tente novamente.\n\n");}}publicvoidloginDAO(Stringlogin,Stringsenha){Stringsql="select perfil, login, senha from users where login = ? and senha = ?";StringsqlUpdate="update users set logado = ? where login = ?";try{PreparedStatementpreparedStatement=connection.prepareStatement(sql);PreparedStatementpreparedStatementUpdate=connection.prepareStatement(sqlUpdate);preparedStatement.setString(1,login);preparedStatement.setString(2,senha);ResultSetresultSet=preparedStatement.executeQuery();resultSet.next();intperfil=resultSet.getInt("perfil");login=resultSet.getString("login");senha=resultSet.getString("senha");preparedStatementUpdate.setInt(1,1);preparedStatementUpdate.setString(2,login);preparedStatementUpdate.executeUpdate();preparedStatementUpdate.close();connection.close();if(perfil==1&&login.equals(login)&&senha.equals(senha)){messages.setSuccess(login+" (administrador) logado com sucesso.\n\n");menuDAO.menuAdminDAO();}elseif(perfil==0&&login.equals(login)&&senha.equals(senha)){messages.setSuccess(login+" (cliente) logado com sucesso.\n\n");menuDAO.menuUserDAO();}elseif(perfil==3&&login.equals(login)&&senha.equals(senha)){messages.setSuccess(login+"(outro) logado com sucesso.\n\n");}else{messages.setFail("Falha ao logar-se\n");}}catch(SQLExceptionsqlException){messages.setFail("Falha ao logar-se\n");Home.main(null);}}}
Home.class
packagebr.com.icebelle.views;importbr.com.icebelle.models.MenuDAO;importjava.sql.*;publicclassHome{privatestaticintperfil;privatestaticbooleanlogado;privatefinalstaticMenuDAOmenuDAO=newMenuDAO();privatefinalstaticUsuarioViewusuarioView=newUsuarioView();privatestaticConnectionconnection;publicstaticvoidmain(String[]args){try{Stringurl="jdbc:mysql://localhost:3306/icebelle_homolog_v2";Stringuser="root";Stringsenha=null;connection=DriverManager.getConnection(url,user,senha);}catch(SQLExceptionsqlException){sqlException.printStackTrace();}try{Stringsql="select perfil, logado from users where login = ?";PreparedStatementpreparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,usuarioView.valorUsuario);ResultSetresultSet=preparedStatement.executeQuery();resultSet.next();perfil=resultSet.getInt("perfil");logado=resultSet.getBoolean("logado");preparedStatement.close();resultSet.close();connection.close();}catch(SQLExceptionsqlException){sqlException.printStackTrace();}if(logado==true&&perfil==1){menuDAO.menuAdminDAO();}elseif(logado==true&&perfil==0){menuDAO.menuUserDAO();}elseif(logado==true&&perfil==3){// Chamar menu outro perfil}elseif(logado==false&&perfil<0){usuarioView.logarUsuario();}elseif(logado==false&&perfil>0){usuarioView.logarUsuario();}}}
R
rubenNs1
A ideia seria basicamente criar/pegar uma sessão para aquele usuário logado.
Pegaria os dados de login, perfil e status de logado do usuário autenticado.
E toda vez que chamasse minha main iria verificar se o usuário já estaria com a autenticação feita, sendo assim se esse retorno fosse positivo já iria carregar o menu para ele.
Caso contrario iria solicitar o login/senha novamente.
staroski
O método main é o ponto de entrada, você só vai chamar ele uma vez, para inicializar sua aplicação.
R
rubenNs1
Ciente, e sobre o valor que eu estou tentando retornar em outra classe, será que seria possível?
staroski
Sim, com passagem de parâmetros, mas não vi em nenhum lugar do seu código você criar um objeto da classe Usuario.
Solucao aceita
Delmiro
Olá boa noite, pelo pouco que entendo acredito você pode criar uma classe singleton para gerenciar o estado de autenticação do usuário. Isso vai permitir que o senhor consiga armazenar as informações do usuário autenticado em um único local e consiga acessar os dados de qualquer classe sem perder o estado.
R
rubenNs11 like
Muito obrigado meu amigo, irei estudar mais sobre esse conceito.