2017-08-15 3 views
1

タイトルについての私の質問。ここに私のログインコード。このように使用すると、 "addOnCompleteListenerメソッドを解決できません...."というメッセージが表示されます。 Androidのスタジオは、Executorにキャストするが、キャストしたときにException "FragmentはExecutorにキャストできない"ので、Executorをキャストすることはできません。どうすればこの問題を解決できますか?フラグメントでFirebase Emailのログインを使用するには?

public class LoginFragment extends Fragment implements View.OnClickListener { 

View v; 
Button btnLogin; 
TextView btnLostPw,btnRegister; 
EditText txMail,txPass; 


private FirebaseAuth mAuth; 
private FirebaseUser mUser; 

public LoginFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this 
    v = inflater.inflate(R.layout.fragment_login, container, false); 

    btnLogin = (Button) v.findViewById(R.id.login_btn_login); 
    btnLostPw =(TextView) v.findViewById(R.id.login_btn_lost_pw); 
    btnRegister=(TextView) v.findViewById(R.id.login_btn_register); 
    txMail=(EditText)v.findViewById(R.id.login_email); 
    txPass=(EditText)v.findViewById(R.id.login_pass); 

    btnRegister.setOnClickListener(this); 
    btnLostPw.setOnClickListener(this); 
    btnLogin.setOnClickListener(this); 

    mAuth = FirebaseAuth.getInstance(); 
    mUser = FirebaseAuth.getInstance().getCurrentUser(); 

    return v; 
} 

@Override 
public void onClick(View v) { 



    if(v.getId() == R.id.login_btn_lost_pw) 
    { 
     //Password Recovery 
    } 

    else if(v.getId() == R.id.login_btn_register) 
    { 
     //Register 
    } 
    else if(v.getId() == R.id.login_btn_login) 
    { 
     LoginUser(txMail.getText().toString(),txPass.getText().toString()); 
    } 
} 

private void LoginUser(String mail, final String password) { 

    try { 
    mAuth.signInWithEmailAndPassword(mail, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()) 
      { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       Fragment mFrag = new NextFragment(); 
       ft.replace(R.id.fragment_container, mFrag); 
       ft.commit(); 
      } 
      else { 
       Snackbar.make(getActivity().findViewById(android.R.id.content), 
         task.getException().getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 
      } 

     } 
    }); 

} 
catch (Exception ex) 
{ 
    Snackbar.make(getActivity().findViewById(android.R.id.content), 
      ex.getLocalizedMessage().toString(), Snackbar.LENGTH_LONG).show(); 
} 

} 

}

編集:クラス内のすべてのコードを追加しました。

ありがとうございました。 ここで働いコード:

mAuth.signInWithEmailAndPassword(mail, password).addOnCompleteListener((Activity) getContext(), new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if(task.isSuccessful()) 
       { 
        FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        Fragment mFrag = new NextFragment(); 
        ft.replace(R.id.fragment_container, mFrag); 
        ft.commit(); 
       } 
       else { 
        Snackbar.make(getActivity().findViewById(android.R.id.content), 
          task.getException().getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 
       } 

     } 
    }); 
+0

は、あなたの完全なクラスコードを投稿します! –

+0

が追加されました。警告ありがとう。 –

+0

私の答えを見つける。 –

答えて

1

は、このコードを試してみてください。

private void LoginUser(String mail, final String password) { 
mAuth.createUserWithEmailAndPassword(mail, password).addOnCompleteListener(getContext(), new OnCompleteListener<AuthResult>() { 
@Override 
public void onComplete(@NonNull Task<AuthResult> task) { 
if(task.isSuccessful()) 
{ 
// Do your task in success 
} 
else { 
// Do your task in failure 

} 
}); 

} 
} 
+0

ありがとう、私の問題を解決します。 –

0

は私が

概要 createUserWithEmailPassword完全なリスナーの内部でフラグメントを使用している:アクティビティ登録 - > [送信]ボタンを - > createUserWithEmailPassword oncompleteListener - >タスクの成功 - >フラグメントは

と呼ばれます

if(task.isSuccessful()) 
      { 
       //Verify Email Dialog 
        FragmentManager fragmentManager = getSupportFragmentManager();        
        VerifyEmailDialogFragment verifyFragment = new VerifyEmailDialogFragment(); 
        verifyFragment.show(fragmentManager, "Verify Email Dialog"); 
      } 

説明:ここでVerifyEmailDialogFragmentは、ユーザーの作成タスクが成功したときに呼び出されるダイアログフラグメントです。

私はこれがあなたが探していることを望みます!

+0

これは活動のためだと思うが、私は断片に取り組んでいる。すべてのクラスコードが追加されましたか? –

+0

フラグメントトランザクションはエラーを出しているので、私が言及したアプローチを使用してフラグメントを呼び出してみてください。それでも動作しない場合は教えてください。 –

+0

私はこれをアクティビティで使用してからフラグメントを呼び出すことを意味すると思います。私はそれを試みたが、私はログインしようとするとクラッシュする。 –

関連する問題