Reputation: 1
I am trying to login verification using firebase realtime database in android studio. However unfortunately I cannot because some error is hindering me:
com.google.firebase.database.DatabaseException: Invalid Firebase Database path: [email protected].
Firebase Database paths must not contain '.', '#', '$', '[', or ']'
at com.google.firebase.database.core.utilities.Validation.validatePathString(Validation.java:45)
at com.google.firebase.database.DatabaseReference.child(DatabaseReference.java:102)
at com.google.firebase.database.DataSnapshot.child(DataSnapshot.java:65)
at com.example.etechnomateapp.loginActivity$2.onDataChange(loginActivity.java:155)
Activity_login page:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/screenbg"
tools:context=".loginActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10sp"
android:orientation="vertical">
<ImageView
android:id="@+id/img"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20sp"
android:src="@drawable/shop_logo"
tools:ignore="ContentDescription"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40sp"
android:layout_marginBottom="40sp"
android:gravity="center_horizontal"
android:text="@string/user_login"
android:textAlignment="center"
android:textAllCaps="true"
android:textColor="@color/colorDarkRed"
android:textSize="22sp"
/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/userEmailWreapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/colorRed"
android:layout_marginTop="5dp"
>
<EditText
android:id="@+id/emailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:layout_marginTop="5dp"
android:inputType="textEmailAddress"
android:hint="@string/enter_email"
android:textColor="@color/colorRed"
android:textSize="18sp"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/userPasswordWreapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/colorRed"
android:layout_marginTop="5dp"
>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:layout_marginTop="5dp"
android:hint="@string/enter_password"
android:textColor="@color/colorRed"
android:inputType="textPassword"
android:textSize="18sp"/>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/btnLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20sp"
android:text="@string/user_login"
android:background="@drawable/btnloginbg"
android:textColor="@color/colorWhite"
android:textSize="20sp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10sp"
android:layout_marginBottom="10sp"
android:gravity="center_horizontal"
android:text="Or"
android:textAlignment="center"
android:textAllCaps="true"
android:textColor="@color/colorDarkRed"
android:textSize="22sp"
/>
<TextView
android:id="@+id/forgetPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/forgetPass"
android:textAlignment="center"
android:textAllCaps="false"
android:layout_marginLeft="45dp"
android:textColor="@color/colorDarkRed"
android:textSize="16sp"
/>
<TextView
android:id="@+id/UserSignup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/signup"
android:textAlignment="center"
android:textAllCaps="false"
android:layout_marginLeft="250dp"
android:layout_marginTop="-20dp"
android:textColor="@color/colorDarkRed"
android:textSize="16sp"
android:clickable="true"
/>
</LinearLayout>
</RelativeLayout>
login_Activity.Java page:
package com.example.etechnomateapp;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputLayout;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class loginActivity extends AppCompatActivity implements View.OnClickListener {
TextInputLayout emailWrapper, passwordWrapper;
EditText userEmail, userPassword;
Button loginBtn;
private AlertDialog loadingBar;
private final String parentDbName = "Users";
private TextView register;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
emailWrapper= findViewById(R.id.userEmailWreapper);
passwordWrapper= findViewById(R.id.userPasswordWreapper);
userEmail= findViewById(R.id.emailAddress);
userPassword=findViewById(R.id.password);
loginBtn=(Button) findViewById(R.id.btnLogin);
AlertDialog.Builder builder= new AlertDialog.Builder(this);
builder.setCancelable(false);
builder.setView(R.layout.activity_layout_loading_dialog);
loadingBar= builder.create();
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loginUser();
}
});
register= (TextView) findViewById(R.id.UserSignup);
register.setOnClickListener(this);
}
private void loginUser(){
String email= userEmail.getText().toString().trim();
String password= userPassword.getText().toString().trim();
if(email.isEmpty()){
emailWrapper.setError("Email Required");
emailWrapper.requestFocus();
return;
}
else if(password.isEmpty()){
passwordWrapper.setError("Password Required");
passwordWrapper.requestFocus();
return;
}
else {
loadingBar.setTitle("Your Login Account");
loadingBar.setMessage("Please wait Until the finish proceeds");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
allowAccessToAccount(email, password);
}
}
private void allowAccessToAccount(final String email, final String password){
final DatabaseReference rootRef;
rootRef= FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.child(parentDbName).child(email).exists()){
LoginUser userData=
snapshot.child(parentDbName).child(email).getValue(LoginUser.class); /*error occur here*/
if(userData.getEmail().equals(email)){
Toast.makeText(loginActivity.this,"Logged In Successfully.", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
// Intent intent = new Intent(loginActivity.this, ShopActivity.class);
//startActivity(intent);
}
else{
loadingBar.dismiss();
Toast.makeText(loginActivity.this, "Register Failed.",
Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(loginActivity.this,"Account with this "+email+" do not exist.",
Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.UserSignup:
startActivity(new Intent( this, RegistrationActivity.class));
break;
}
}
LoginUser.java page:
package com.example.etechnomateapp;
public class LoginUser {
private String firstName, lastName, password, email, contact;
public LoginUser() {
}
public LoginUser(String firstName, String lastName, String password, String email, String contact) {
this.firstName = firstName;
this.lastName = lastName;
this.password = password;
this.email = email;
this.contact = contact;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
}
Database:
Upvotes: 0
Views: 631
Reputation: 6919
It's because you have provided the email as child where, special character not allowed in firebase realtime database
LoginUser userData = snapshot.child(parentDbName).getValue(LoginUser.class);
Upvotes: 1