Ошибка нулевой строки при аутентификации телефона Firebase в Android Studio - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь реализовать двухэтапную проверку с помощью Firebase Auth. Когда пользователь переходит к PelephoneActivity, у него есть уникальный uuid, который он получает при подписке по электронной почте.В PelephoneActivity я пытаюсь получить также номер телефона пользователя.

Мне на самом деле не нужна другая авторизация, но я не знаю, как остановить аутентификацию после получения смс-кода.

В любом случае, мой код:

public class PelephoneActivity extends AppCompatActivity {
    private static final String TAG = "PelephoneActivity";


    private FirebaseAuth mAuth;
    private DatabaseReference UsersRef;
    String currentUserID;


    private Spinner spinner;
    private EditText editText;



    private String verificationId,phoneNumber;
    private ProgressBar progressBar;
    private EditText editTextC;
    private Button signIn;
    private TextView plsWait;



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pelephone);
        Log.d(TAG, "onCreate: started.");

        mAuth = FirebaseAuth.getInstance();
        currentUserID = mAuth.getCurrentUser().getUid();
        UsersRef = FirebaseDatabase.getInstance().getReference().child("users").child(currentUserID);



        spinner = findViewById(R.id.spinnerCountries);
        spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, CountryData.countryNames));

        editText = findViewById(R.id.editTextPhone);

        //////////////////////////////////////////////
        progressBar = findViewById(R.id.progressbar);
        editTextC = findViewById(R.id.editTextCode);
        signIn=findViewById(R.id.buttonSignIn);
        editTextC.setVisibility(View.INVISIBLE);
        signIn.setVisibility(View.INVISIBLE);
        plsWait.setVisibility(View.INVISIBLE);
        /////////////////////////////////////////////



        findViewById(R.id.buttonContinue).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String code = CountryData.countryAreaCodes[spinner.getSelectedItemPosition()];
                String number = editText.getText().toString().trim();
                if (number.isEmpty() || number.length() < 9) {
                    editText.setError("Valid number is required");
                    editText.requestFocus();
                    return;
                }

                phoneNumber = "+" + code + number;

                signIn.setVisibility(View.VISIBLE);
                plsWait.setVisibility(View.VISIBLE);

            }
        });


        findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String code = editTextC.getText().toString().trim();

                if (code.isEmpty() || code.length() < 6)
                {
                    editTextC.setError("Enter code...");
                    editTextC.requestFocus();
                    return;
                }
                verifyCode(code);

            }
        });

    }


    private void sendVerificationCode(String number) {
        progressBar.setVisibility(View.VISIBLE);
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                number,  //Phone number to verify
                60,     //timeout duration
                TimeUnit.SECONDS,  //unit of timeout
                TaskExecutors.MAIN_THREAD,  //Activity  for callback binding
                mCallBack  //OnVerificationStateChangedCallbacks
        );

    }

    private void verifyCode(String code) {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
        signInWithCredential(credential);
    }

    private void signInWithCredential(PhoneAuthCredential credential) {
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            progressBar.setVisibility(View.GONE);
                        } else {

                            }
                        }
                    });
        }


    private PhoneAuthProvider.OnVerificationStateChangedCallbacks
            mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

        @Override
        public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken)
        {
            super.onCodeSent(s, forceResendingToken);
            verificationId = s;
        }

        @Override
        public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential)
        {
            String code = phoneAuthCredential.getSmsCode();
            if (code != null) {
                editTextC.setText(code);
                verifyCode(code);

                Intent intent = new Intent(PelephoneActivity.this, LoginActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intent);
            }
        }


        @Override
        public void onVerificationFailed(FirebaseException e) {
            Toast.makeText(PelephoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    };

}

И ошибка:

 --------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.blue, PID: 6726
    java.lang.IllegalArgumentException: Given String is empty or null
        at com.google.android.gms.common.internal.zzbo.zzcF(Unknown Source:11)
        at com.google.firebase.auth.PhoneAuthCredential.<init>(Unknown Source:3)
        at com.google.firebase.auth.PhoneAuthProvider.getCredential(Unknown Source:2)
        at com.example.android.bluesky.SetupAccount.PelephoneActivity.verifyCode(PelephoneActivity.java:176)
        at com.example.android.bluesky.SetupAccount.PelephoneActivity.access$900(PelephoneActivity.java:52)
        at com.example.android.bluesky.SetupAccount.PelephoneActivity$2.onClick(PelephoneActivity.java:150)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Структура базы данных: enter image description here

Есть идеи как это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...