2014-09-26 4 views
0

기본 로그인 작업과 인증을 수행하는 활동이 있습니다. 로그인이 성공하면 다른 활동으로 이동할 수 있습니다. 로그인이 실패하거나 부적절한 값이 사용자에 의해 입력 된 경우 동일한 활동을로드 중입니다.android에서 동일한 활동을 여러 번 삭제/삭제하는 방법은 무엇입니까?

내가 직면 한 문제는

입니다. 로그인에 실패하면 동일한 작업이 표시됩니다. 이 작업이 여러 번 수행되면 동일한 작업이 표시됩니다. 내가 완전히 끝내기 전에 같은 활동의 여러 복사본이 표시됩니다. 뒤늦게 쌓여있는 이전 활동을 삭제/삭제할 수 있습니까? 다음은

당신은에 이미

Intent intent = new Intent(MainActivity.this,MainActivity.class); 
startActivity(intent); 

코드 아래 사용

@Override 
 
public void onClick(View v) { 
 

 
if(!email.getText().toString().isEmpty() && (!password.getText().toString().isEmpty())) 
 
{ 
 
    isValid = login_validation(email.getText().toString()); 
 
    if (isValid) { 
 
     SharedPreferences sharedpreferences = getSharedPreferences(
 
              "MyData", Context.MODE_PRIVATE); 
 
     SharedPreferences.Editor editor = sharedpreferences.edit(); 
 
     editor.putString("email", email.getText().toString()); 
 
     editor.putString("password", password.getText().toString()); 
 
     editor.commit(); 
 
     Toast.makeText(MainActivity.this, "Login Successful",Toast.LENGTH_LONG).show(); 
 
     Intent intent = new Intent(MainActivity.this,Second_Activity.class); 
 
     startActivity(intent); 
 
    } 
 
    else 
 
    { 
 
     Toast.makeText(MainActivity.this, "Login Failed. Please enter correct               credentials",Toast.LENGTH_LONG).show(); 
 
     Intent intent = new Intent(MainActivity.this,MainActivity.class); 
 
     startActivity(intent); 
 
    } 
 
} 
 
else 
 
{ 
 
    Toast.makeText(MainActivity.this, "Email/Password cannot be empty",Toast.LENGTH_LONG).show(); 
 
    Intent intent = new Intent(MainActivity.this, 
 
     MainActivity.class); 
 
     startActivity(intent); 
 
} 
 

 

 
} 
 
});

미리 감사드립니다

+0

이 작업을 수행하는 가장 좋은 방법은 AsyncTask를 사용하는 것입니다. 비동기 작업의 메서드는이 작업에 매우 적합합니다. 내가 로그인 작업을 이해한다면 어딘가에 서버에 연결하고 이것이 기본 스레드에서 수행되어야한다는 것입니다. 따라서 비동기 작업을 사용하는 또 하나의 유효한 지점입니다. – Skynet

+0

intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 또는 새 작업을 시작하기 전에 finish()를 호출하십시오. 또는 UI 필드를 지우십시오. – SKT

+0

finish()는 잘 작동합니다.하지만 5 개의 화면이 있다면 어떻게됩니까? ABCDE라고 말하십시오. 이제 모든 작업이 완료되면 E에 있습니다. 아래 코드를 사용하여 활동 B로 이동합니다. startActivity (intent); this.finish(); 이 코드는 E 활동 만 죽일 것입니다.하지만 C, D 활동도 ​​죽이고 싶습니다 ... 어떻게해야합니까? –

답변

0

그나마 열린 같은 활동에 MainActivity.java 내 코드입니다 이 화면에서 위의 제거 만하면됩니다. lines

+0

그러면 동일한 활동을 다시로드하는 방법 MainActivity가 다시로드됩니까? –

+0

왜 다시로드 하시겠습니까? – Palak

+0

오, 그래, 알았어 .. 나쁘다. 나는 레이아웃의 필드를 리셋 할 수있다. 나는 그것이 작동 할 것이라고 생각한다. –

관련 문제