2011-03-31 6 views
1

로그인 화면과 표시 화면의 두 가지 주요 활동이있는 Android 애플리케이션을 작성하려고합니다. 현재 사용자가 이미 로그인 한 경우 로그인 화면을 건너 뛰도록 설정하고 있습니다. 상태에 따라 활동을 시작하는 루프

이 작업을 수행하는 가장 좋은 방법을 해결하기 위해, 나는 이런 식으로 뭔가를 보이는 일반적인 "메인"활동을 만들어 :

public class Main extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

    // Get preferences 
    SharedPreferences settings = getSharedPreferences("PREFERENCES", MODE_PRIVATE); 

    super.onCreate(savedInstanceState); 
     //setContentView(R.layout.viewusage); 

     //System.out.println(settings.getBoolean("LOGGEDIN", false)); 

     if (settings.getBoolean("LOGGEDIN", false) == false) 
     { 
      Intent intent = new Intent(Main.this, Login.class); 
     startActivity(intent); 
     } 
     else 
     { 
      Intent intent = new Intent(Main.this, Display.class); 
     startActivity(intent); 
     } 

    } 

} 

생각은 누군가가 성공적으로 로그인하면 로그인 활동 것입니다 사용자 환경 설정에 필요한 모든 세부 정보를 저장 한 다음 작업을 마칩니다(). 그러면 주 활동으로 돌아갑니다. 내가 뭘 하려는지는 주요 활동이 실행중인 활동이 없을 때 if ... else 문을 반복하여 반복하도록하는 것입니다. 로그인 페이지가 닫히면 if ... else 문이 다시 실행됩니다. 로그인 활동보다는 표시 활동을 시작해야합니다. 사용자가 Display 클래스에서 로그 아웃하면 반대가됩니다.

while (true) 루프를 사용하려고 생각했지만 프로그램이 중단되었습니다. 나는 별도의 스레드에 퍼팅 생각했는데 이미 다른 활동이 실행중인 경우 검색하는 방법을 모르겠다. 그래서 별도의 스레드가 루핑을 계속하고 새 작업을 열 것이다 (나는 시도하지 않았다. 그것)

나는 이것을 어떻게 할 수 있었는지에 대한 제안?

감사합니다.

답변

2

onCreate이 반환 될 때까지 활동이 실제로 해제되지 않기 때문에 onCreate에서 반복 할 수 없습니다.

한 가지 가능한 방법은 startActivityForResult을 사용하고 로그인 및 표시 활동이 다른 활동을 종료할지 또는 계속 진행할지 나타내는 코드를 반환하도록하는 것입니다. 그런 다음 루프를 onCreate 대신에 onActivityResult에 논리를 배치합니다.

또 다른 방법은 사용자가 로그 아웃 할 때 직접 로그인 활동을 시작하도록 디스플레이 활동을 디자인하는 것입니다. 반대의 경우도 마찬가지입니다. 이렇게하면 기본 활동은 처음에 표시 할 활동을 결정한 후 finish()으로 호출 할 수 있습니다.

1

질문에 약간 혼란 스럽지만, startActivity이 아닌 startActivityForResult을 사용하고 싶습니다. 이렇게하면 로그인 Activity의 결과 인 true/false을 반환 할 수 있으므로 로그인이 성공하면 DisplayActivity을 시작할 수 있습니다. 마찬가지로 Display 활동의 경우 사용자가 로그 아웃하면 finish()Activity이고 "로그 아웃"결과는 Main으로 반환되어 사용자를 로그 아웃합니다.

2

내 머리 꼭대기에서 떨어져.

로그인을 타임 스탬프하는 로그인 클래스를 작성하고 메소드 isLoginStillValid()를 사용하여 설정된 시간이 지난 후에 로그인을 만료시키고 로그인 객체를 onRetainNonConfigurationState의 소프트 kill에 저장하십시오. onCreate에서 로그인 객체를 가져옵니다. 해당되는 경우 로그인 필드를 onDestroy()의 환경 설정에 저장하십시오. onRetainNonConfigurationState에서 플래그 isSavedInstanceState를 true로 설정하고 이것을 사용하여 onDestroy에서 환경 설정에 기록해야하는지 결정하십시오. 나는이 소리가 복잡하다는 것을 알고 있지만 이것은 재사용 가능한 템플릿이다.

결국 결국 onCreate에서 로그인 개체를 찾습니다. 로그인이 만료되었는지 확인하십시오. 그렇다면 GetLogin 대화 상자를 게시하십시오.모든 인증 된 호출에서 인증 된 호출에 대한 액세스를 허용하기 전에 로그인이 만기되었는지 확인하십시오. 로그인이 만료 된 경우 GetLogin 대화 상자를 다시 게시하십시오. 앱이 포 그라운드로 들어간 이후로 시간이 지났을 수 있음을 기억하십시오.

마지막으로 startActivityForResult를 사용하여 GetLoginDialog를 시작하면 로그인 데이터를 검색하고 새로운 타임 스탬프로 로그인 객체를 업데이트 할 수 있습니다.

JAL

관련 문제