2016-11-02 1 views
-1

내 프로젝트에 Sinch Android SDK을 통합하려고하는데 로그인 버튼을 제거하고 싶습니다. 즉, 사용자가 로그인 버튼을 클릭하지 않고도 다음 활동으로 전환됩니다. 이를 위해 mLoginButton에 대해 setOnClickListener의 코드를 제거하고 이전에 onClick() 메서드에서 호출되었던 loginClicked() 함수를 직접 호출했습니다.
그러나이 경우 NullPointerException: Attempt to invoke virtual method 'boolean com.example.yankee.cw.SinchService$SinchServiceInterface.isStarted()' on a null object reference이 발생합니다.Android - 왜이 함수를 onClick 대신 직접 호출하면 NullPointerException이 발생합니까?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     mLoginName = (EditText) findViewById(R.id.loginName); 

     mLoginButton = (Button) findViewById(R.id.loginButton); 
     mLoginButton.setEnabled(false); 
     mLoginButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       loginClicked(); 
      } 
     }); 
    } 

는 왜이 작품과 대신 NullPointerException 제공 않습니다

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     mLoginName = (EditText) findViewById(R.id.loginName); 

     mLoginButton = (Button) findViewById(R.id.loginButton); 
     mLoginButton.setEnabled(false); 
//  mLoginButton.setOnClickListener(new OnClickListener() { 
//   @Override 
//   public void onClick(View v) { 
//    loginClicked(); 
//   } 
//  }); 
     loginClicked(); 
    } 

그리고 일찍는 다음과 같이이었다 :
이 내가 코드에 변경되는 것만은?

편집 : LoginActivity.java

+0

이미 제공 – Ishan

+0

코드의 나머지 부분은 이전과 같다 loginClicked() 방법을 제공한다. 죄송합니다. 링크하지 않았습니다. 지금 링크를 추가했습니다. – Yankee

+0

@ Yankee 문제를 이해하기 위해 loginClicked() 메소드를 제공하십시오. – LoveAndroid

답변

2

getSinchServiceInterface() 방법은 당신이 널 포인터 예외를 얻고있는 이유입니다 널 (null)을 반환합니다.

이전 loginCliked() 메서드는 onServiceConnected 메서드에서 버튼이 활성화 된 후에 호출되고있었습니다.

onServiceConnected() 메서드에서 loginClicked() 메서드를 호출하거나 약간의 지연을 사용 해보십시오.

+0

와우, 형. 나는이 문제에 대해 일주일이 지나서야 울고있다. 그리고 이것은 방금 효과가있었습니다. 고마워. – Yankee

+0

welcome : – Ishan

+0

'onServiceConnected()'에'loginClicked()'를 넣어야하는 이유를 간단히 설명해 주시겠습니까? – Yankee

1

내 용액 :

final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     loginClicked(); 
    } 
}, 4000); 
+1

안녕하세요. SO! 소스 코드의 형식을 확인하십시오 - http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks –

+0

@Dekel 잘 했어, 내 하루를 구 했어 참조하십시오. –

관련 문제