2013-05-02 2 views
0

Android 앱에서 작업 중이며 GUI를 업데이트하는 데 문제가 있습니다. 기본적으로 내가 원하는 것은 사용자가 로그인 단추를 클릭하고 아래 정의 된대로 groupLogInProgress에서 setVisibility 메서드를 호출하고 View.VISIBILE로 설정할 때입니다. 그런 다음 로그를 기록한 내 메서드를 실행하고 성공 값을 반환하면 groupLogInProgress를 View.GONE으로 설정하고 groupLogInSuccess를 View.VISIBLE로 설정합니다 ("로그인 성공"표시). 잠시 멈추고 내 주요 의도. 내 로그인 메소드가 false를 반환하면 groupLogInProgress를 View.GONE으로 설정하고 groupLogInError를 View.VISIBLE로 설정하십시오. 로그 인 메서드가 완료 될 때까지 기다리는 동안 내 앱이 멈추지 않으면 서 이러한 일이 발생하도록하는 방법을 알아낼 수 없습니다.사용자 로그인 중 진행 상태 표시 - Android App

아래는 제가 지금까지 가지고있는 것입니다, 어떤 도움이 대단히 감사합니다 !!

private class LoginTask extends AsyncTask<Void, Integer, Integer> 
{ 
static final int STATUS_SUCCESS = 1; 
static final int STATUS_FAIL = 0; 

@Override 
protected void onPreExecute() 
{ 
    hideAllStatus(); //this is simple method that sets all above groups to View.GONE 
} 

@Override 
protected Integer doInBackground(Void... params) 
{ 
    loginData = LogInUser(username, password); 
    return (loginData == null ? STATUS_FAIL : STATUS_SUCCESS); 
} 

@Override 
protected void onPostExecute(Integer result) 
{ 
    if (result == STATUS_FAIL) 
    { 
    //set groupLogInError to View.VISIBLE, all others to GONE 
    } 
    else 
    {  
    //set groupLogInSuccess to View.VISIBLE, all others to GONE and pause for a few seconds to allow user to see "Sign In Successful!" message 
    } 

} 
} 

가 실행 작업 :

//Hide all Sign In progress/success/error layouts onCreate 
groupLogInProgress = (LinearLayout) findViewById(R.id.groupLoginProgress); 
groupLogInSuccess = (LinearLayout) findViewById(R.id.groupLoginSuccess); 
groupLogInError = (LinearLayout) findViewById(R.id.groupLoginError);   
hideAllStatus(); //this is simple method that sets all above groups to View.GONE 

//Sign in button onClick handler 
public void onClick(View v) { 
    loginData = LogInUser(username, password); 
if(loginData == null) 
{ 
    //set groupLogInError to View.VISIBLE, all others to GONE 
} 
else 
{  
     //set groupLogInSuccess to View.VISIBLE, all others to GONE and pause for a few seconds to allow user to see "Sign In Successful!" message 
    } 
}  
+1

AsyncTask, http://developer.android.com/guide/components/processes-and-threads.html – CSmith

+0

http : // developer를보세요. .android.com/reference/android/os/AsyncTask.html, 이것이 도움이 될 수 있습니다. – Wamasa

답변

0

AsyncTask를 정의

new LoginTask().execute(); 

나는 세부 사항의 일부에 걸쳐 호도했습니다,하지만이 클래스는, 당신의보기를 loginData에 액세스해야합니다 변수 등이 포함되어 있으므로 활동 내에서 개인 클래스가 될 수 있습니다. 결과를 돌아 다니는 등의 세부 정보가 남아 있습니다.

+0

감사합니다 CSmith, 예를 사용하여 한 가지 예외를 제외하고 상태 표시기를 올바르게 표시 할 수있었습니다. GUI를 업데이트하여 올바른 오류 또는 성공 그룹을 표시하도록 할 수는 있지만 표시하고 싶으면 오류가 표시되고 3 초 동안 기다린 후 사라지고 성공하면 3으로 표시되기를 원합니다. 몇 초 후에 새로운 의도를 시작하십시오. Thread.sleep (3000)을 사용하면 올바른 상태 그룹 인 GUI가 새로 고쳐지기 전에 3 초가 경과 할 때까지 기다리는 것처럼 보입니다. – Phil

+0

그래서 3 초를 기다리며 "로그인 성공"이라고 말합니다. "Sign In Successful"을 표시하고 새로운 의도를 시작하기 전에 3 초 동안 기다리는 대신 매우 빨리 사라집니다. – Phil

+0

LoginTask에 개인 클래스 멤버 변수를 추가하여 오류 문자열을 저장할 수 있습니다. 3 초 "로그인 성공"메시지가 표시되면 토스트 메시지를 고려해야합니다 (표시되는 시간을 명시 적으로 제어 할 수는 없지만). 새로운 인 텐트를 즉시 시작할 수 있으며 토스트는 여전히 맨 위에 표시됩니다. – CSmith