2012-08-03 1 views
0

사용자가 서비스에 로그인했을 때 주저하는 활동이 있습니다. 로그인 한 사용자가 없으면 새로운 활동이 열립니다.static 핸들러에서 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에 해당하는 경우 자동 로그인 활동을 닫으려면합니다.

로그인 화면을 구현하려는 계획이 잘못되었을 수 있습니다. 너를 권유하는 또 다른 방법을 들여다 볼 것이다.

+0

이것이 올바른 방법인지는 확실하지 않지만 여기에 나와 있습니다. 스레드에서 실행되는 코드를 수정하여 finish()를 호출했습니다. 잘 작동하는 것 같습니다. – techiegoob

+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

답변

3

finish()은 정적 메서드가 아니므로 해당 클래스의 특정 인스턴스와 연결되어 정적 메서드 (정의에 따라 클래스 인스턴스와 연결되지 않음)에서 사용할 수 없게 만듭니다. finish()에 전화하는 대신 활동을 정적 방법으로 참조 할 수있는 경우 myActivity.finish()으로 전화를 걸 수 있습니다.

로그인 액티비티에서 startActivityForResult()를 호출하고 로그인이 필요하지 않은 경우 사용자 상호 작용없이 액티비티를 반환하는 것이 더 나은 해결책 일 수 있습니다.

관련 문제