2013-05-02 47 views
0

我正在開發Android應用程序,並且在更新GUI時遇到問題。基本上我想實現的是當我的用戶點擊Sign In按鈕時,按照下面的定義調用groupLogInProgress上的setVisibility方法,並將其設置爲View.VISIBILE。然後啓動我的方法,記錄他們,如果它返回一個成功值,將groupLogInProgress設置爲View.GONE,並將groupLogInSuccess設置爲View.VISIBLE(顯示「登錄成功!」)暫停幾秒鐘,然後開始我的主要意圖。如果我的登錄方法返回false,請將groupLogInProgress設置爲View.GONE,將groupLogInError設置爲View.VISIBLE。我似乎無法弄清楚如何在不等待登錄方法完成的情況下導致我的應用程序掛起時發生這些事情。在登錄用戶時顯示進度文本 - Android App

下面是我到目前爲止,任何幫助非常感謝!

//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 2013-05-02 17:05:28

+0

看看http:// developer .android.com/reference/android/os/AsyncTask.html,這可能對你有所幫助。 – Wamasa 2013-05-02 17:06:59

回答

0

定義一個的AsyncTask:

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 
    } 

} 
} 

執行任務:

new LoginTask().execute(); 

我已經掩蓋了一些細節,但這個類將需要訪問loginData,您的瀏覽變量等,因此可能是您的活動中的私人類。一些細節留給你,如傳遞結果等

+0

謝謝CSmith,使用你的例子,我已經能夠正確顯示狀態指示器,只有一個例外。我該如何做到這一點,以便更新GUI以顯示正確的錯誤或成功組,但是由於我希望它顯示的錯誤,請等待3秒鐘,然後離開,如果成功,我希望它也顯示爲3秒,然後開始新的意圖。當我使用Thread.sleep(3000)時,似乎要等到3秒鐘才刷新GUI,並顯示正確的狀態組 – Phil 2013-05-02 19:12:34

+0

,以便等待3秒鐘,然後THEN說「Sign In Successful!」。並且消失得非常快,而不是顯示「登錄成功」並等待3秒鐘,然後開始新的意圖。 – Phil 2013-05-02 19:14:51

+0

您可以向LoginTask添加私有類成員變量來保存錯誤字符串。你應該考慮3秒的「登錄成功」消息的Toast消息(儘管你沒有明確控制它的出現時間)。您可以立即啓動新的Intent,Toast仍然會顯示在最上面。 – CSmith 2013-05-02 20:19:04