samar script
samar script

Reputation: 1

database. Database Exception: Invalid Firebase Database path?

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:

RealTime DB image

Upvotes: 0

Views: 631

Answers (1)

Ashish
Ashish

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

Related Questions