Encerrar aplicação

31 respostas
F

Galera, tenho uma aplicação que tem uma tela de Login e mais algumas telas. Quando clico no Menu Sair de minha aplicação, volta na tela de Login. Gostaria que encerrasse o aplicativo. Alguém tem uma ideia de como faz?

31 Respostas

g4j

É android?

F

É. To usando o finish no switch-case, mas cai na tela de login

g4j

finish() volta à tela que invocou a activity anterior. Não existe mecanismo próprio no android para fazer isso, pois este comportamento não é esperado. Você ja percebeu que apps famosos como Gmail, Maps, app de Contatos não tem um botão Sair ou Finalizar?

leia mais sobre:

https://www.google.com.br/#q=android+finish+app

F

Estou lendo o link e não estou achando nada, tem como me ajudar?

g4j

É o link da pesquisa. No primeiro site já tem uma boa discussão sobre o assunto.

F

Vi esse link:


http://stackoverflow.com/questions/4732184/how-to-finish-an-android-application

Não estou entendendo bem ao certo o que tem que fazer.

g4j

Leia também a documentação da API:

http://developer.android.com/reference/android/app/Activity.html

Nela você vai encontrar um diagrama contendo o ciclo de vida de uma activity.

F

Pensei nesse OnDestroy. Não sei como usá-lo.

g4j

Hmmm. Acho que entendi melhor o que você quer e acho que da pra fazer sim. Quando você invoca finish() em uma Activity, esta é finalizada e o android volta o fluxo para a Activity que a invocou, por isso está voltando para o login.

Vamos com calma. A Activity que tem o botão “Sair” provavelmente foi invocado da Activity de login, certo? Poste o código (classe inteira) da Activity de login.

F

Segue Login.java

package com.br.aquavendas;

import com.br.aquavendas.vo.Global;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Login extends Activity{
	public static Global global = new Global();

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		
		final EditText edtLogin = (EditText) findViewById(R.id.edtLogin);
		final EditText edtSenha = (EditText) findViewById(R.id.edtSenha);
		
		edtLogin.setText("");
		edtSenha.setText("");
		
		final SharedPreferences preferencia = getSharedPreferences("config", 0);
		
		Button btnLogar = (Button) findViewById(R.id.btnLogar);
		
		btnLogar.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String login = preferencia.getString("login", "admin");
				String senha = preferencia.getString("senha", "123");
				
				if (login.equals(edtLogin.getText().toString())){
					if (senha.equals(edtSenha.getText().toString())){
						startActivity(new Intent(getBaseContext(), Main.class));
						global.setUsuarioLogado(edtLogin.getText().toString());
					}
				}
				
			}
		});

	} // Fim onCreate


}
F

g4j

A classe Login ta postada ai, ok? No aguardo de uma ajuda quando possível.

Marcelo_de_Araujo

Faz assim:
Na tela de login, se o usuário e senha forem digitados corretamente, chama a próxima atividade e invoca o método finish(); logo após. Assim, a tela de login vai ser fechada, e quando vc voltar, o aplicativo será encerrado, pq não existe mais a atividade de login na pilha de atividades.

F

m_araujo01, Seria no botão Logar da Classe Login?

Button btnLogar = (Button) findViewById(R.id.btnLogar);
		
		btnLogar.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String login = preferencia.getString("login", "admin");
				String senha = preferencia.getString("senha", "123");
				
				if (login.equals(edtLogin.getText().toString())){
					if (senha.equals(edtSenha.getText().toString())){
						startActivity(new Intent(getBaseContext(), Main.class));
						global.setUsuarioLogado(edtLogin.getText().toString());
					}
				}
				
			}
		});
A

Olá
É só colocar o finish() após o global.setUsuarioLogado(edtLogin.getText().toString());

F

Ok, obrigado. Vou testar.

g4j

A H Gusukuma:
Olá
É só colocar o finish() após o global.setUsuarioLogado(edtLogin.getText().toString());

Não entendi. Finaliza a activity após fazer o login?

F

É o que disseram pra fazer, tem alguma sugestão?

A

Já testou? O que ocorreu?

F

Estou testando no momento. Já posto o resultado.

F

Matou a paulada, A H Gusukuma, rs. Tópico encerrado. Valeu mesmo. Novamente vc me ajudou, e a todos também. Meu muito obrigado.

g4j

fbrigatt:
Segue Login.java

... startActivity(new Intent(getBaseContext(), Main.class)); ... }

Uma possível saída é você usar o método startActivityForResult, que retorna para a activity chamadora (método onActivityResult da activity de login) e você pode finalizar dependendo do código que retorna (requestCode).

http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int,%20android.os.Bundle%29

F

A solução que o A H Gusukuma disse deu certo, mas valeu a dica.

g4j

Quando você tecla em voltar no dispositivo e não no botão o que acontece? Vai sair da aplicação ou vai voltar pro login? Tudo depende da regra de negócio da aplicação, de no caso você querer que volte para a tela de login. Como um botão logout ao invés de sair por exemplo.

F

Fiz o que o A H Gusukuma sugeriu e ele encerra a aplicação ao clicar em Sair no meu Menu. Não testei do dispositivo.

g4j

Legal, entendi. Só que você entendeu o porque? É importante você assimilar isso. Leia a documentação e estude o diagrama de fluxo de execução das activity.

F

Valeu g4j e A H Gusukuma pela ajuda nesse tópico.

Marcelo_de_Araujo

fbrigatt, respondendo a sua pergunta, vai depender muito das regras de navegação do seu aplicativo. Eu por exemplo, costumo fechar a tela de login (finish():wink: sempre que o login for efetuado com sucesso, assim não tem perigo de o usuário clicar em voltar, e ir para a tela de login novamente. Eu sempre uso também o recurso de preferências do Android (SharedPreferences), para salvar os dados de login e senha, para que o usuário não precise digitar novamente os dados quando abrir o aplicativo novamente. Mas aí vai da necessidade de cada um.

F

Ok, mas já resolvi, obrigado pela dica.

F

A H Gusukuma, pode me ajudar nesse tópico, não sei o que fazer mais. Por favor?

http://www.guj.com.br/java/304744-erro-estranho-ao-selecionar-item-de-lista

A

Vou dar uma olhada

F

Valeu, tópico concluído

Criado 9 de outubro de 2013
Ultima resposta 12 de out. de 2013
Respostas 31
Participantes 4