The email address is badly formatted Firebase - android

hi i am working on a android project where i am using firebase as back-end and i am building a signup and login form . When ever i sign up the code is working well and . When i try to retrieve it using "signInWithEmailAndPassword i am getting the fallowing error. The email address is badly formatted Firebase`
login Activity
public class LoginActivity extends AppCompatActivity {
private EditText mLoginEmailField;
private EditText mloginPassField;
private Button mLoginbtn;
private Button mNewAccountbtn;
private DatabaseReference mDatabaseRefrence;
private FirebaseAuth mAuth;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
mLoginEmailField = (EditText) findViewById(R.id.loginEmailField);
mloginPassField = (EditText) findViewById(R.id.loginPasswordField);
mLoginbtn = (Button) findViewById(R.id.loginBtn);
mNewAccountbtn = (Button) findViewById(R.id.newAccountbtn);
mDatabaseRefrence = FirebaseDatabase.getInstance().getReference().child("Users");
mNewAccountbtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent rigisterIntent = new Intent(LoginActivity.this,RigisterActivity.class);
rigisterIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(rigisterIntent);
}
});
mLoginbtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
CheckLogin();
}
});
}
private void CheckLogin() {
String email = mloginPassField.getText().toString().trim();
String pass = mloginPassField.getText().toString().trim();
if(!TextUtils.isEmpty(email) && !TextUtils.isEmpty(pass)){
mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(this,new OnCompleteListener<AuthResult>() {
#Override
public void onComplete(#NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
CheackUserExsists();
}else{
System.out.println("Sign-in Failed: " + task.getException().getMessage());
Toast.makeText(LoginActivity.this,"Erorr Login",Toast.LENGTH_LONG).show();
}
}
});
}
}
private void CheackUserExsists() {
final String user_id = mAuth.getCurrentUser().getUid();
mDatabaseRefrence.addValueEventListener(new ValueEventListener() {
#Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild(user_id)){
Intent MainIntent = new Intent(LoginActivity.this,MainActivity.class);
MainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(MainIntent);
}else
{
Toast.makeText(LoginActivity.this,"You need to setup your Account.. ",Toast.LENGTH_LONG).show();
}
}
#Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Rigister Actvity
public class RigisterActivity extends AppCompatActivity {
private EditText mNameField;
private EditText mPassField;
private EditText mEmailField;
private Button mRigisterbtn;
private ProgressDialog mProgres;
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rigister);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
mAuth = FirebaseAuth.getInstance();
mProgres = new ProgressDialog(this);
mNameField = (EditText) findViewById(R.id.nameField);
mPassField = (EditText) findViewById(R.id.passFiled);
mEmailField = (EditText) findViewById(R.id.emailField);
mRigisterbtn = (Button) findViewById(R.id.rigisterbtn);
mRigisterbtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
StartRigister();
}
});
}
private void StartRigister() {
final String name = mNameField.getText().toString().trim();
String pass = mPassField.getText().toString().trim();
String email = mEmailField.getText().toString().trim();
if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(pass) && !TextUtils.isEmpty(email)){
mProgres.setMessage("Signing Up... ");
mProgres.show();
mAuth.createUserWithEmailAndPassword(email,pass).addOnCompleteListener(this,new OnCompleteListener<AuthResult>() {
#Override
public void onComplete(#NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
String user_id = mAuth.getCurrentUser().getUid();
DatabaseReference CurentUser_db = mDatabase.child(user_id);
CurentUser_db.child("name").setValue(name);
CurentUser_db.child("image").setValue("defalut");
mProgres.dismiss();
Intent mainIntent = new Intent(RigisterActivity.this, MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mainIntent);
}
}
});
}
}
}
I have made sure that i have setup email and password active in the auth section of firebase.
still firebase giving me the following error.

Your code to set email is incorrect. You are setting email to the value of the EditText for password.
In method CheckLogin(), change:
String email = mloginPassField.getText().toString().trim();
to:
String email = mLoginEmailField .getText().toString().trim();

Simply use Edittext named as Email and Password you need not do anything.
the error comes up only if you use plaintext for both...

I faced this problem recently, possible solutions are :
Check the inputType of your EditText Field.
ADD this attribute to your EditText
android:inputType="textEmailAddress"
In Activity class, it should look like if u are using TextInputLayout instead of editText
mDisplayName=(TextInputLayout) findViewById(R.id.reg_name);
mDisplayEmail=(TextInputLayout)findViewById(R.id.reg_email);
mDisplayPassword=(TextInputLayout)findViewById(R.id.reg_password);
String name = mDisplayName.getEditText().getText().toString();
String email = mDisplayEmail.getEditText().getText().toString();
String password = mDisplayPassword.getEditText().getText().toString();`

Remove whitespaces from email text it worked for me. by using trim() method you can remove spaces.

The error popped for me due to my silly action of using "tab" to go to the next text field. Don't use "tab" for it, instead use your mouse to move to the next text field. Worked for me.

What helped me resolve this issue is to put the android:id into the correct place.
If you are using Material design, there are two parts of your text input, the layout and the actual functional part.
If you put the ID into the layout, you'll only be able to access editText property in the activity class, but if you put it in the functional part, you'll be able to access .text or getText() as someone above has stated.

Change
String pass = mloginPassField.getText().toString().trim();
mAuth.signInWithEmailAndPassword(email,pass)
to
String password = mloginPassField.getText().toString().trim();
mAuth.signInWithEmailAndPassword(email,password)

Your code to set email is incorrect.
Perhaps a space was used as the last letter.
final User? user = (await _auth.signInWithEmailAndPassword(
email: _emailController.text.toString().trim(),
password: _passwordController.text,
)).user;[![enter image description here][1]][1]

Related

I want to update my document fields in android studio

Here is Code
holder.btnEdit.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
final DialogPlus dialogPlus=DialogPlus.newDialog(holder.btnEdit.getContext())
.setContentHolder(new ViewHolder(R.layout.update_popup))
.setExpanded(Boolean.parseBoolean("true"),1200)
.create();
//dialogPlus.show();
View v =dialogPlus.getHolderView();
EditText name=v.findViewById(R.id.editName);
EditText fname=v.findViewById(R.id.editFName);
EditText Department=v.findViewById(R.id.editdepartment);
EditText RollNo=v.findViewById(R.id.editroll);
EditText phone=v.findViewById(R.id.editphone);
EditText email=v.findViewById(R.id.editEmail);
EditText address=v.findViewById(R.id.editAddress);
EditText password=v.findViewById(R.id.editPassword);
Button btnUpdate = v.findViewById(R.id.btnUpdate);
name.setText(student.getName());
fname.setText(student.getFName());
Department.setText(student.getDepartment());
RollNo.setText(student.getRollno());
phone.setText(student.getPhone());
email.setText(student.getEmail());
address.setText(student.getAddress());
password.setText(student.getPass());
dialogPlus.show();
btnUpdate.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Map<String,Object> map = new HashMap<>();
map.put("Name",name.getText().toString());
map.put("FName",fname.getText().toString());
map.put("Department",Department.getText().toString());
map.put("Rollno",RollNo.getText().toString());
map.put("phone",phone.getText().toString());
map.put("Email",email.getText().toString());
map.put("address",address.getText().toString());
map.put("pass",password.getText().toString());
FirebaseUser user = mAuth.getCurrentUser();
FirebaseFirestore firestore=FirebaseFirestore.getInstance();
firestore.collection("Student").document(user.getUid()).update(map)
.addOnSuccessListener(new OnSuccessListener<Void>() {
#Override
public void onSuccess(Void unused) {
}
});
Like in Real time Database it would be
FirebaseDatabase.getInstance().getReference().child("Student").child(getRef(Position).key)).updateChildren(map)
How I can do it in Firestore?
It looks like you never initialize mAuth.
You probably need something like this in your onCreate:
mAuth = FirebaseAuth.getInstance();
Also see the documentation on getting started with Firebase Authentication on Android, from which that code comes.

Firebase app will not add user to my real time database

I am working on an Android app and I am trying to add a user to my real time database in Firebase. This is done in a Registration Fragment. Here is the code for it:
public class RegisterFragment extends Fragment {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* #return A new instance of fragment RegisterFragment.
*/
// TODO: Rename and change types and number of parameters
public static RegisterFragment newInstance() { return new RegisterFragment(); }
private FirebaseAuth mAuth;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users");
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_register,
container, false);
mAuth = FirebaseAuth.getInstance();
final EditText user = view.findViewById(R.id.username);
final EditText email = view.findViewById(R.id.email);
final EditText password = view.findViewById(R.id.password);
final EditText confirmPassword = view.findViewById(R.id.confirmpassword);
final Button btnAction = view.findViewById(R.id.AddUser);
final Button btnLogin = view.findViewById(R.id.btnLoginTab);
btnLogin.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.copyright_frame_layout, LoginFragment.newInstance());
ft.addToBackStack(null);
ft.commit();
}
});
btnAction.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (password.getText().toString().equals(confirmPassword.getText().toString()))
AddUser(user.getText().toString(), email.getText().toString(), password.getText().toString(), confirmPassword.getText().toString());
else {
password.getText().clear();
confirmPassword.getText().clear();
Toast.makeText(getActivity(), "Passwords do not match, please reenter your password!", Toast.LENGTH_SHORT).show();
return;
}
}
});
return view;
}
private void AddUser(final String username, final String email, final String password, final String confirmpassword){
// Write a message to the database
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
#Override
public void onComplete(#NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Toast.makeText(getActivity(),"A user with this same email is found!",Toast.LENGTH_SHORT).show();
return;
}
else{
Users user = new Users(email, password, username);
String messageId = myRef.push().getKey();
myRef.child(messageId).setValue(user);
Toast.makeText(getActivity(),"A new user has been added!",Toast.LENGTH_SHORT).show();
}
}
});
}
}
What my code is doing right now is it's taking some basic values (username, email and password) and instead of adding this to my real time database, called Users, its just adding it as one of the Authentication users.
Here's what I have in users
What I would like to know is how do I keep adding users to my real time database.
Okay so I managed to fix my issue. There was a number of steps (non-coding) that I was not made aware of. First off, I needed to set my target database to Real Time Database. Mine was set to Cloud Firestore "Beta".
From there I had to set up my read/write rules accordingly. Now I am able to create new users and I see them now in my real time database

Android Studio - Login page not working

I am trying to make a simple login page that with the correct username and password will go to another activity (Already been created) Also the attempt counter isn't functioning properly. Sorry If this poorly worded, hopefully it makes sense.
public class login extends Activity {
private EditText username;
private EditText password;
private Button login;
private TextView loginLocked;
private TextView attemptsLeft;
private TextView numberOfRemainingLoginAttemptsTV;
int numberOfRemainingLoginAttempts = 3;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
setupVariables();
}
public void Login(View view) {
if (username.getText().toString().equals("admin") && password.getText().toString().equals("secret")) {
Intent i = new Intent(login.this, MainActivity.class);
startActivity(i);
Toast.makeText(getApplicationContext(), "Welcome User",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Wrong Credentials",
Toast.LENGTH_SHORT).show();
numberOfRemainingLoginAttempts--;
attemptsLeft.setVisibility(View.VISIBLE);
numberOfRemainingLoginAttemptsTV.setVisibility(View.VISIBLE);
numberOfRemainingLoginAttemptsTV.setText(Integer.toString(numberOfRemainingLoginAttempts));
if (numberOfRemainingLoginAttempts == 0) {
login.setEnabled(false);
loginLocked.setVisibility(View.VISIBLE);
loginLocked.setBackgroundColor(Color.RED);
loginLocked.setText("Please Try Again Later");
}
}
}
private void setupVariables() {
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
login = (Button) findViewById(R.id.button);
loginLocked = (TextView) findViewById(R.id.loginLocked);
attemptsLeft = (TextView) findViewById(R.id.attemptsLeft);
numberOfRemainingLoginAttemptsTV = (TextView) findViewById(R.id.numberOfRemainingLoginAttemptsTV);
numberOfRemainingLoginAttemptsTV.setText(Integer.toString(numberOfRemainingLoginAttempts));
}
}
When you use startActivity() you have to use it on the context (Not always. Only in certain conditions but I think it is a good practice to declare it on the context). So change startActivity(i) to login.this.startActivity(i);
Hopefully that should get it running.
Hope it helps!
EDIT: pls post your Layout file as well. AND in your public void login add this
REMEMBER: put it directly in the void and NOT in the if statement
Log.i("LOGIN DETAILS","Username: "+username.getText().toString()+"Password: "+password.getText().toString());
Then post your log cat with the info filter.
If your not so good with the log cat you can instead add this line of code in your public void login NOT in if statement
Toast.makeText(login.this, "Username: "+ username.getText().toString() + "password: " + password.getText().toString(), Toast.LENGTH_LONG).show();

Trouble converting an editable to a string (username/password test)

I'm trying to create a simple username/password login screen. I have the layout done, and right now, I'm trying to set it so when the username (EditText) == "crete", then it should do something. Here is my code...:
public class Login extends Activity {
public static EditText username, password;
public Button loginbutton;
boolean accessgranted;
public String dbu, dbp, user1;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
username = (EditText) this.findViewById(R.id.username);
password = (EditText) this.findViewById(R.id.password);
loginbutton = (Button) this.findViewById(R.id.loginbutton);
user1 = "crete";
loginbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try{
dbu = (username.getText()).toString();
}
finally{
if (dbu == user1){
username.setText("SUCCESS");
}
}
}
});
}
}
this, sadly, doesn't work. It correctly converts it to a string (i think) because when I tested this code out :
loginbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try{
dbu = (username.getText()).toString();
}
finally{
username.setText("done" + dbu);
}
}
}
});
It correctly enters what you entered into the EditText, plus the word "done".
There seems to be a problem with creating if-then statements??
You test for String equality with the method .equals("String").
With == you are testing if the references to the objects are equal.
Try using equalsIgnoreCase(String) instead of the == comparator.
Like this: dbu.equalsIgnoreCase(user1)
dub and user1 are two separate String objects. You're comparing them like this: dbu == user1. This will always return false. Instead, replace it with dbu.equals(user1).

Authentication Android

I want to create a static test in my authentication but when I click on button "Valider" nothing happen, instead when I remove the "if" condition and I click on "valider" button the next activity start. I think there is a problem when I put a condition for testing but I don't know what's it. Can you help ? thanks
public class TabAdmin extends Activity implements View.OnClickListener{
private EditText username;
private EditText password;
public String user_name;
public String pass_word;
private Button valider;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.authen);
username = (EditText) findViewById(R.id.login);
password = (EditText) findViewById(R.id.pwd);
valider = (Button) findViewById(R.id.valider);
valider.setOnClickListener((OnClickListener) this);
}
public void onClick(View v) {
if (v == valider) {
user_name = username.getText().toString();
pass_word = password.getText().toString();
if((user_name=="admin")&&(pass_word=="admin"))
{
Intent goToNextActivity = new Intent(getApplicationContext(), MenuAdmin.class);
startActivity(goToNextActivity);
}
}
}
try using if (v.equals(valider)) instead of if (v == valider)
For one thing the way you're comparing strings isn't right for Java. Try
if ("admin".equals(user_name) && "admin".equals(pass_word)) {
This isn't a great way of doing passwords though as anyone can read the strings out of the APK.
instead of
if((user_name=="admin")&&(pass_word=="admin"))
use
if((user_name.equals("admin"))&&(pass_word.equals("admin")))
I hope it can help u

Categories

Resources