2016-05-31 49 views
0

所以我一直在研究自己的一個小項目,我面臨的問題是它正在工作,但startActivity在signIn()方法執行完成之前執行,即,完成活動我得到一個彈出選擇電子郵件帳戶。Java - signIn按預期工作

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.sign_in_button) { 
     signIn(); 
    } 
    startActivity(new Intent(LoginActivity.this, MainActivity.class)); 
    overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); 
    finish(); 
} 

private void signIn() { 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 

而且,當互聯網不可用時,該應用程序不工作,我該如何使其工作?它崩潰的消息「不幸的應用程序已停止。」

+0

如果簽到是異步(它必須是如果網絡參與),您將需要實現等待響應的回調接口,然後運行開始活動。 – zgc7009

+0

我沒有想到線程或Asynctask,因爲我沒有任何經驗,但無論如何,我會嘗試在AsyncTask中實現它,如下面的答案中提供的 –

+0

介意發佈您的代碼signIn()?如果您仍然遇到問題,我可能會有所幫助 – zgc7009

回答

0

試圖捕捉異常(你是哪種異常)

private void signIn() { 
    try{ 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 
    catch(Exception ex){ 
     //write to us your ex.getMessage(); 
    } 
} 
0

請參閱此Check network connectivity for android,在做任何網絡操作之前​​執行此操作,並在未連接到互聯網的情況下通過對話框通知用戶。

關於活動開始前簽到()函數完成後,我會建議使用的AsyncTask()對於這一點,

    在onpreexceute
  • (),您可以顯示進度對話框。
  • 在doinBackground()把簽到()函數
  • 在onpostexeceute()啓動活動

爲的AsyncTask Referece參考here

祝你好運。

+0

如果您覺得這有幫助並已解決您的問題,請選擇此答案爲正確:)。 –

+0

我這樣做的網絡連接問題是應用程序崩潰時試圖打開應用程序沒有互聯網連接。 –

+0

可以發佈android工作室的錯誤日誌圖像或一些信息導致應用程序崩潰的錯誤...... –