java - 登录 Google Firebase
问题描述
这是我的java代码:
public void saveData(String email,String pass){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(EMAIL,email);
editor.putString(PASS,pass);
editor.putBoolean(REMEMBER,checkBox.isChecked());
editor.commit();
}
private void loadData() {
if(sharedPreferences.getBoolean(REMEMBER,false)) {
edt_tendangnhap.setText(sharedPreferences.getString(EMAIL, ""));
edt_matkhau.setText(sharedPreferences.getString(PASS, ""));
checkBox.setChecked(true);
}
else
checkBox.setChecked(false);
}
private void clearData() {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
private void addcontrols(){
edt_tendangnhap = (EditText) findViewById(R.id.edt_tendangnhap);
edt_matkhau = (EditText) findViewById(R.id.edt_matkhau);
btn_dangnhap = (Button)findViewById(R.id.btn_dangnhap);
btn_dangky = (Button) findViewById(R.id.btn_dangky);
getBtn_dangnhapgoole = (Button) findViewById(R.id.btn_dangnhapgoogle);
quenmk = (TextView) findViewById(R.id.quenmk);
checkBox = (CheckBox) findViewById(R.id.checkbox);
}
private void addEvents(){
btn_dangnhap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAuth = FirebaseAuth.getInstance();
final String email = edt_tendangnhap.getText().toString();
final String password = edt_matkhau.getText().toString();
if (checkBox.isChecked()){
saveData(email,password);
}
else {
clearData();
}
if(TextUtils.isEmpty(email)){
Toast.makeText(MainActivity.this,"Vui lòng điền email",Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password)){
Toast.makeText(MainActivity.this,"Vui lòng nhập mật khẩu",Toast.LENGTH_SHORT).show();
return;
}
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
FirebaseUser currentUser = mAuth.getCurrentUser();
String email=currentUser.getEmail();
String uid=currentUser.getUid();
FirebaseDatabase firebaseDatabase=FirebaseDatabase.getInstance();
DatabaseReference reference=firebaseDatabase.getReference("Users");
String admin = "admin@gmail.com";
boolean sosanh = email.equals(admin);
if ( sosanh == true){
Toast.makeText(MainActivity.this, "Đăng nhập thành công admin", Toast.LENGTH_SHORT).show();
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("ĐĂNG NHẬP");
dialog.setMessage("Login Admin......");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
Intent intent = new Intent(MainActivity.this, Admin_QuanLy.class);
startActivity(intent);
}
else {
Toast.makeText(MainActivity.this, "Đăng nhập thành công", Toast.LENGTH_SHORT).show();
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("ĐĂNG NHẬP");
dialog.setMessage("Vui lòng đợi chúng tôi kiểm tra tài khoản của bạn");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
}
else {
Toast.makeText(MainActivity.this,"Đăng nhập thất bại",Toast.LENGTH_SHORT).show();
}
}
});
}
});
btn_dangky.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setTitle("Đăng ký");
dialog.show();
dialog.setCancelable(false);
dialog.setContentView(R.layout.custom_dangky);
final EditText edt_tk = (EditText) dialog.findViewById(R.id.edt_tk);
final EditText edt_mk = (EditText) dialog.findViewById(R.id.edt_mk);
Button btn_dongy = (Button) dialog.findViewById(R.id.btn_dongy);
Button btn_huy = (Button) dialog.findViewById(R.id.btn_huy);
btn_dongy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAuth = FirebaseAuth.getInstance();
final String email = edt_tk.getText().toString();
final String password = edt_mk.getText().toString();
if(TextUtils.isEmpty(email)){
Toast.makeText(MainActivity.this,"Vui lòng điền email",Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password)){
Toast.makeText(MainActivity.this,"Vui lòng nhập mật khẩu",Toast.LENGTH_SHORT).show();
return;
}
mAuth.createUserWithEmailAndPassword(email ,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
mAuth= FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
Toast.makeText(getApplicationContext(),"Đăng ký thành công",Toast.LENGTH_SHORT).show();
dialog.cancel();
edt_tendangnhap.setText(email);
edt_matkhau.setText(password);
}
}
});
}
});
btn_huy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
dialog.show();
}
});
quenmk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setTitle("Đăng ký");
dialog.show();
dialog.setCancelable(false);
dialog.setContentView(R.layout.custom_quen_mat_khau);
final EditText edt_email = (EditText) dialog.findViewById(R.id.edt_quenmatkhau);
Button btn_dongy = (Button) dialog.findViewById(R.id.btn_dongy_quenmk);
Button btn_trove = (Button) dialog.findViewById(R.id.btn_trove);
btn_dongy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = edt_email.getText().toString().trim();
if (TextUtils.isEmpty(email)) {
Toast.makeText(getApplication(), "Vui lòng nhập email", Toast.LENGTH_SHORT).show();
return;
}
mAuth.getCurrentUser().getEmail();
mAuth.sendPasswordResetEmail(email).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(getApplication(), "Một đường dẫn tạo lại mật khẩu sẽ được gửi về email của bạn", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplication(), "Có lỗi...", Toast.LENGTH_SHORT).show();
}
}
});
}
});
btn_trove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
dialog.show();
}
});
getBtn_dangnhapgoole.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DangNhapGoogle(apiClient);
}
});
}
private void TaoClientDangNhapGoogle(){
GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder()
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
apiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API,signInOptions).build();
}
private void DangNhapGoogle(GoogleApiClient apiClient){
KIEMTRA_PROVIDERDANGNHAP = 1;
Intent iDNgoogle = Auth.GoogleSignInApi.getSignInIntent(apiClient);
startActivityForResult(iDNgoogle,CODE_DANG_GOOGLE);
}
private void ChungThucDangNhapFireBase(String tokenID){
if (KIEMTRA_PROVIDERDANGNHAP == 1){
AuthCredential authCredential = GoogleAuthProvider.getCredential(tokenID,null);
mAuth.signInWithCredential(authCredential).addOnCompleteListener(this,new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Toast.makeText(MainActivity.this, "Đăng nhập thành công", Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE_DANG_GOOGLE){
if (resultCode == RESULT_OK){
if (data!=null){
GoogleSignInResult signInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
GoogleSignInAccount account = signInResult.getSignInAccount();
String torkenID = account.getIdToken();
ChungThucDangNhapFireBase(torkenID);
}
}
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
protected void onStart() {
super.onStart();
if (mAuth != null) {
mAuth.addAuthStateListener(this);
}
}
@Override
protected void onStop() {
super.onStop();
if (mAuth != null){
mAuth.removeAuthStateListener(this);
}
}
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null){
Toast.makeText(MainActivity.this, "Đăng nhập thành công", Toast.LENGTH_SHORT).show();
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("ĐĂNG NHẬP");
dialog.setMessage("Vui lòng đợi chúng tôi kiểm tra tài khoản của bạn");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
Intent intent = new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
}else {
Toast.makeText(MainActivity.this, "Đăng nhập thất bại", Toast.LENGTH_SHORT).show();
}
}
我遇到了两个错误:原因:java.lang.NullPointerException:尝试调用虚拟方法'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.signInWithCredential(com.google.firebase .auth.AuthCredential)' 在空对象引用上
将结果 ResultInfo{who=null, request=3, result=-1, data=Intent { (has extras) }} 传递给活动 {com.sict.ordermonan/com.sict.ordermonan.MainActivity} 失败:java.lang。 NullPointerException:尝试在空对象引用上调用虚拟方法“com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.signInWithCredential(com.google.firebase.auth.AuthCredential)”
解决方案
推荐阅读
- javascript - 类中的方法仅在它们内部返回值 self JS
- android - 是否可以清理由另一个系统库加载的共享 (HAL) 库?
- react-native - 如何在 react-native 中播放背景视频?
- excel - 将 excel 中的值与匹配和更改的条件相加
- swift - Swift 编译器警告 - 实例方法需要 ###ms 进行类型检查(限制:100 毫秒)
- git - 具有相同提交消息的 Git squash 提交
- javascript - 如何将 HTML 中的文本区域输出到 Javascript 中的变量?
- python - 在 SecondaryAxis 上绘制网格线 - Matplotlib
- php - 无法连接到本地 mysql
- python - 如何使用 NaN 值计算 pandas 的时差