로그인 전화를 반환 널 포인터를 사용하여 중포 기지합니다

markharrop :

그래서 사용자가 자신의 전화 번호를 사용하여 로그인 할 수 있도록 중포 기지에서 튜토리얼을 따라하기 위해 노력하고있어. 나는 튜토리얼 비디오를 시청했습니다. 내 모든 코드는 올바른 보인다. 난 내 테스트 장치에 그것을 시도 할 때하지만 난 널 포인터 오류가 발생합니다 ...

 at com.google.android.gms.common.internal.Preconditions.checkNotNull(Unknown Source)
    at com.google.firebase.auth.PhoneAuthProvider.verifyPhoneNumber(Unknown Source)
    at studios.p9p.chatomatic.chat_o_matic.PhoneLogin.CheckPhoneNumber(PhoneLogin.java:92)
    at studios.p9p.chatomatic.chat_o_matic.PhoneLogin.access$000(PhoneLogin.java:29)
    at studios.p9p.chatomatic.chat_o_matic.PhoneLogin$1.onClick(PhoneLogin.java:52)

전화 로그인에 대한 내 코드는 다음입니다.

  private EditText et_check_phone_number;
private EditText et_verify_code;
private Button btn_phone;
private Button btn_verify;
private String getPhoneNumber, getVerifactionCode;
private String mVerificationId = "";
private FirebaseAuth mAuth;
private FirebaseDatabase db;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mcallBacks;
private PhoneAuthProvider.ForceResendingToken mResendToken;
private ProgressDialog mloading;

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

  mAuth = FirebaseAuth.getInstance();
    initVariables();
    btn_phone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CheckPhoneNumber();
        }
    });

    btn_verify.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            VerifyPhoneNumber();
        }
    });
}


private void initVariables() {
    et_check_phone_number = findViewById(R.id.et_phonenumber);
    et_verify_code = findViewById(R.id.etvarifaction);
    btn_phone = findViewById(R.id.btn_phone_login);
    btn_verify = findViewById(R.id.btn_phone_verify);
    mloading = new ProgressDialog(this);
}

private void CheckPhoneNumber() {
    getPhoneNumber = et_check_phone_number.getText().toString();

    if (TextUtils.isEmpty(getPhoneNumber))
    {
        Toast.makeText(this, "Phone Number Field Cant Be Empty...", Toast.LENGTH_SHORT).show();
    } else{

                mloading.setTitle("Checking Your Phone Number");
                mloading.setMessage("It Gonna Take A Second...");
                mloading.setCanceledOnTouchOutside(false);
                mloading.setIcon(R.mipmap.ic_launcher);
                mloading.show();

                PhoneAuthProvider.getInstance().verifyPhoneNumber(
                        getPhoneNumber,        // Phone number to verify
                        60,                 // Timeout duration
                        TimeUnit.SECONDS,   // Unit of timeout
                        this,               // Activity (for callback binding)
                        mcallBacks);
            }
    }

    mcallBacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
            signInWithPhoneAuthCredential(phoneAuthCredential);
        }

        @Override
        public void onVerificationFailed(FirebaseException e) {

            Toast.makeText(PhoneLogin.this, "Wrong Or Invalid Phone Number...", Toast.LENGTH_SHORT).show();
            btn_phone.setVisibility(View.VISIBLE);
            et_check_phone_number.setVisibility(View.VISIBLE);
            et_verify_code.setVisibility(View.INVISIBLE);
            btn_verify.setVisibility(View.INVISIBLE);
            if (e instanceof FirebaseAuthInvalidCredentialsException) {
                Toast.makeText(getBaseContext(), "Invalid Request " + e.toString(), Toast.LENGTH_SHORT).show();
            } else if (e instanceof FirebaseTooManyRequestsException) {
                Toast.makeText(getBaseContext(), "The SMS quota for the project has been exceeded " + e.toString(), Toast.LENGTH_SHORT).show();
            }


        }
        @Override
        public void onCodeSent(String verificationId,
                               PhoneAuthProvider.ForceResendingToken token) {
            // Save verification ID and resending token so we can use them later
            mVerificationId = verificationId;
            mResendToken = token;
            Toast.makeText(PhoneLogin.this, "Code Sent Please Check Your SMS...", Toast.LENGTH_SHORT).show();
            btn_phone.setVisibility(View.INVISIBLE);
            et_check_phone_number.setVisibility(View.INVISIBLE);
            et_verify_code.setVisibility(View.VISIBLE);
            btn_verify.setVisibility(View.VISIBLE);

        }
    };
}




private void VerifyPhoneNumber() {
    getVerifactionCode = et_verify_code.getText().toString();
    if (TextUtils.isEmpty(getVerifactionCode)){
        Toast.makeText(this, "Please Enter The Code Sent To Your SMS...", Toast.LENGTH_SHORT).show();
    }else{
        mloading.setTitle("Checking Your Verification code ");
        mloading.setMessage("Ill Be Back In A Jiffy...");
        mloading.setCanceledOnTouchOutside(false);
        mloading.setIcon(R.mipmap.ic_launcher);
        mloading.show();
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, getVerifactionCode);
        signInWithPhoneAuthCredential(credential);
    }

}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {

                     mloading.dismiss();
                        Toast.makeText(PhoneLogin.this, "Login Successful...", Toast.LENGTH_SHORT).show();
                        Intent phoneloginIntent  =new Intent (getBaseContext(),Home_Screen.class);
                        phoneloginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(phoneloginIntent);
                        finish();
                    } else {
                        String mesage = task.getException().toString();
                        Toast.makeText(PhoneLogin.this, "Error: " + mesage, Toast.LENGTH_SHORT).show();
                    }
                }
            });
}

은 "+44"나는 잘못된 전화 번호를 입력 한 경우 보려고 덧붙였다. 내가 먼저 응용 프로그램의 편집 텍스트로 수동으로 44을 추가하여 그것을 시도하고 같은 오류를 준 ..

******편집하다******

그래서 또한 올바르게 전화 번호를 캡처 있는지 확인하기 위해 로그를 실행 .. 숫자보다 큰 9 자리였다 경우가 작동 않네으로 물었다 인증 제공자 내부의 선을 제거 필자.

Log.i("Verify_Phone_Number",getPhoneNumber);
 2019-07-16 14:15:30.585 32055-32055/studios.p9p.chatomatic.chat_o_matic I/Verify_Phone_Number: +447******100 and it returns correctly 

******편집하다******

좋아, 그래서 더 시험에 내가 제대로 작동 전화 번호를 입력하기 전에 btn_phone을 클릭하면,하지만 난 단순히 편집 테스트에 전화 번호를 추가하는 경우 먼저이 로그 캣 위의 메시지와 함께 충돌 thebtn_phone를 누르십시오

markharrop :

좋아, 그래서 난이 문제를 해결하는 방식은 코드에서 생성 섹션에 mcallbacks를 이동했다. 아래 그림과 같이

setContentView(R.layout.activity_phone__login);
    mAuth = FirebaseAuth.getInstance();
    InitVariables();
    AddPhoneNumberButtons();

    mcallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
            signInWithPhoneAuthCredential(phoneAuthCredential);
        }

        @Override
        public void onVerificationFailed(FirebaseException e) {

            Toast.makeText(getBaseContext(), "Wrong Or Invalid Phone Number...", Toast.LENGTH_SHORT).show();
            AddPhoneNumberButtons();
            if (e instanceof FirebaseAuthInvalidCredentialsException) {
                Toast.makeText(getBaseContext(), "Invalid Request " + e.toString(), Toast.LENGTH_SHORT).show();
            } else if (e instanceof FirebaseTooManyRequestsException) {
                Toast.makeText(getBaseContext(), "The SMS quota for the project has been exceeded " + e.toString(), Toast.LENGTH_SHORT).show();
            }


        }
        @Override
        public void onCodeSent(String verificationId,
                               PhoneAuthProvider.ForceResendingToken token) {
            // Save verification ID and resending token so we can use them later
            verificationid = verificationId;
            mresendtoken = token;
            Toast.makeText(getBaseContext(), "Code Sent Please Check Your SMS...", Toast.LENGTH_SHORT).show();
            AddVerifyButtons();

        }
    };

추천

출처http://43.154.161.224:23101/article/api/json?id=230155&siteId=1