마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

여기서 cannot find symbol method getProviders()이 계속 뜹니다.

0 추천
package com.hanseo_software.gpstrackerapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.SignInMethodQueryResult;

import java.util.List;

public class RegisterActivity extends AppCompatActivity {

    EditText e4_email;
    FirebaseAuth auth;
    ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        e4_email = (EditText)findViewById(R.id.editText4);
        auth = FirebaseAuth.getInstance();
        dialog = new ProgressDialog(this);

    }

//    public void goToPasswordActivtity(View v) {
//        Intent myIntent = new Intent(RegisterActivity.this, PasswordActivity.class);
//        startActivity(myIntent);
//    }

    public void goToPasswordActivtity(View v) {
        dialog.setMessage("checking email address");
        dialog.show();
         //이 이메일이 실제로 있는지 없는지 확인
        auth.fetchSignInMethodsForEmail(e4_email.getText().toString())
                .addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
                    @Override
                    public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
                        if (task.isSuccessful()) {
                            dialog.dismiss();
                            boolean check = !task.getResult().getProviders().isEmpthy();

                            if (!check) {
                            //if (task.getResult().getSignInMethods().size() == 0){
                                //email이 존재하지 않아서 생성할 수 있다.
                                Intent myIntent = new Intent(RegisterActivity.this, PasswordActivity.class);
                                myIntent.putExtra("eamil", e4_email.getText().toString());
                                startActivity(myIntent);
                            } else {
                                dialog.dismiss();
                                Toast.makeText(getApplicationContext(),"이 eamail은 이미 생성되어 있습니다.",Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                });

    }
}
getProviders()가 버전이 안 맞고, 이전에 사용하던거라 이제 다른 걸 사용한다는 것 같은데 그 방법을 모르겠습니다.
익명사용자 님이 2020년 2월 12일 질문

1개의 답변

0 추천
Task가 SignInMethodQueryResult를 사용하는 generic class이네요.
따라서 task.getResult()는 SignInMethodQueryResult를 반환합니다.

com.google.firebase.auth.SignInMethodQueryResult class는
getProviders() method를 가지고 있지 않습니다.

https://firebase.google.com/docs/reference/android/com/google/firebase/auth/SignInMethodQueryResult
디자이너정 (42,810 포인트) 님이 2020년 2월 12일 답변
위에서 코드가 잘렸는데
boolean check = !task.getResult().getSignInMethods().isEmpthy();
로 수정했을 때, 이번에는 isEmpthy()가 똑같은 상황이 벌어지네요 ㅠㅠ
package com.hanseo_software.gpstrackerapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.SignInMethodQueryResult;

import java.util.List;

public class RegisterActivity extends AppCompatActivity {

    EditText e4_email;
    FirebaseAuth auth;
    ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        e4_email = (EditText)findViewById(R.id.editText4);
        auth = FirebaseAuth.getInstance();
        dialog = new ProgressDialog(this);

    }

//    public void goToPasswordActivtity(View v) {
//        Intent myIntent = new Intent(RegisterActivity.this, PasswordActivity.class);
//        startActivity(myIntent);
//    }

    public void goToPasswordActivtity(View v) {
        dialog.setMessage("checking email address");
        dialog.show();
         //이 이메일이 실제로 있는지 없는지 확인
        auth.fetchSignInMethodsForEmail(e4_email.getText().toString())
                .addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
                    @Override
                    public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
                        if (task.isSuccessful()) {
                            dialog.dismiss();
                            //boolean check = !task.getResult().getProviders().isEmpthy();
                            boolean check = !task.getResult().getSignInMethods().isEmpty();

                            if (!check) {
                            //if (task.getResult().getSignInMethods().size() == 0){
                                //email이 존재하지 않아서 생성할 수 있다.
                                Intent myIntent = new Intent(RegisterActivity.this, PasswordActivity.class);
                                myIntent.putExtra("eamil", e4_email.getText().toString());
                                startActivity(myIntent);
                                finish();

                            } else {
                                dialog.dismiss();
                                Toast.makeText(getApplicationContext(),"이 eamail은 이미 생성되어 있습니다.",Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                });

    }
}
위에 코드로 수정을 하니 강제 종료가 일어나는데 어떻하죠 ㅠㅠ
...