2012-08-03 33 views
0

我有shecks如果用戶已登錄到該服務的主要活動。如果沒有用戶登錄,它會打開一個新的活動:無法調用finish()從靜態處理

if (userName == null) { 
    Intent myIntent = new Intent(MainActivity.this, Login.class); 
    MainActivity.this.startActivity(myIntent); 
} 

此活動對用戶名和密碼,登錄按鈕領域。用戶填寫信息後點擊登錄。我做網絡都在一個新的線程:

new Thread(new Runnable() { 
    public void run() { 
    try {     
      Auth myAuth = new Auth(getApplicationContext()); 
    Boolean isAuth = false; 
    isAuth=myAuth.getAuthToken(tUserName.getText().toString(), tPassword.getText().toString()); 
      Bundle b = new Bundle(); 
    b.putBoolean("isAuth", isAuth); 
    Message msg = new Message(); 
    msg.setData(b); 
    loginHandler.dispatchMessage(msg); 
     } 
     catch (InterruptedException ex) { ex.printStackTrace(); } 
     catch (Exception ex) { ex.printStackTrace();} 
     finally { }   } 
    }).start(); 

此發佈消息回處理程序:

private static Handler loginHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     mProgress.setVisibility(View.GONE);   

     if(msg.getData().getBoolean("isAuth")){ 
      // UNABLE TO CALL FINISH 
     } 
     else 
     { 
      CharSequence msg2 = "Login Failed";   
      Toast.makeText(context, msg2, Toast.LENGTH_SHORT).show(); 
     } 
    } 
}; 

我想自動關閉登錄活動如果isAuth是真實的。

我對implemeting登錄屏幕可能走錯路的計劃。只是讓我知道,我會研究你建議的另一種方式。

+0

不知道這是否是正確的方式來做到這一點,但在這裏。我修改了線程中運行的代碼以調用finish()。它似乎工作正常。 – techiegoob 2012-08-07 20:35:48

+0

isAuth = myAuth.getAuthToken(tUserName.getText()。toString(),tPassword.getText()。toString()); \t \t \t \t \t如果(isAuth){ \t \t \t \t \t \t光潔度(); \t \t \t \t \t} \t \t \t \t \t否則{ \t \t \t \t \t \t捆B =新軟件包(); \t \t \t \t \t \t b.putBoolean(「isAuth」,isAuth); \t \t \t \t \t \t消息msg = new Message(); \t \t \t \t \t \t msg.setData(b); \t \t \t \t \t \t loginHandler.dispatchMessage(msg); \t \t \t \t \t} – techiegoob 2012-08-07 20:37:04

回答

3

finish()不是一個靜態方法,它使其與其類的特定實例相關聯 - 使其無法從靜態方法中使用(根據定義,該方法不與類的實例關聯)。如果您可以將您的活動引用到靜態方法中,則可以調用myActivity.finish()而不是調用finish()

也許不過,更好的解決方案是簡單地調用startActivityForResult()的登錄活動,讓沒有用戶交互該活動的回報,如果沒有登錄是必要的。