0

I'm trying to create a user registration using firebase database. The problem is that I cannot connect with the database. The authorization section works, as I see the result in the firebase console. But the moment I use the DatabaseReference object it doesn't work. I use the resource in westeurope1, but I don't think that's the problem. I checked the "google-services.json" file and it is the latest version given to me by firebase, I have already tried to delete the build directory and the cache. the problem after a bit of testing looks like that you just can't connect, but i don't understand why auth works and databasereference doesn't.

The class code:

package com.example.chatappfirebase;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.common.util.JsonUtils;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.Query;
import com.google.firebase.database.ValueEventListener;
import com.rengwuxian.materialedittext.MaterialEditText;

import java.util.HashMap;

public class RegisterActivity extends AppCompatActivity {

    MaterialEditText username, email, password;
    Button btn_register;

    FirebaseAuth auth;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference reference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Register");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        username = findViewById(R.id.username);
        email = findViewById(R.id.email);
        password = findViewById(R.id.password);
        btn_register = findViewById(R.id.btn_register);

        auth = FirebaseAuth.getInstance();
        firebaseDatabase = FirebaseDatabase.getInstance();


        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String txt_username = username.getText().toString().trim();
                String txt_email = email.getText().toString().trim();
                String txt_password = password.getText().toString().trim();

                if (TextUtils.isEmpty(txt_username) || TextUtils.isEmpty(txt_email) || TextUtils.isEmpty(txt_password)){
                    Toast.makeText(RegisterActivity.this, "All fileds are required", Toast.LENGTH_SHORT).show();
                } else if (txt_password.length() < 6){
                    Toast.makeText(RegisterActivity.this, "Password must be at least 6 characters", Toast.LENGTH_SHORT).show();
                } else {
                    register(txt_username, txt_email, txt_password);
                }

            }
        });
    }

    private void register(String username, String email, String password){

        auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            FirebaseUser firebaseUser = auth.getCurrentUser();
                            assert firebaseUser != null;
                            String userid = firebaseUser.getUid();

                            reference = firebaseDatabase.getReference("Users").child(userid);

                            HashMap<String, String> hashMap = new HashMap<>();
                            hashMap.put("id", userid);
                            hashMap.put("username", username);
                            hashMap.put("imageURL", "default");

                            Log.e("test", "reference");
                            reference.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {

                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    Log.e("test", "okay");
                                    if (task.isSuccessful()){
                                        Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                                        startActivity(intent);
                                        finish();

                                    }
                                }
                            });
                        } else {
                            Toast.makeText(RegisterActivity.this, "You can't register woth this email or password", Toast.LENGTH_SHORT).show();
                        }
                    }
                });

    }
}
LeoBe
  • 13
  • 4
  • Is your onComplete even triggered? – Alex Mamo Jun 21 '21 at 15:56
  • No, the log does not print – LeoBe Jun 21 '21 at 15:58
  • 1
    Can you try passing the database URL in to `FirebaseDatabase.getInstance("pass your URL here")`? – Frank van Puffelen Jun 21 '21 at 15:58
  • @FrankvanPuffelen Yes, in that case, most likely it's because of the [database location](https://stackoverflow.com/questions/67795058/save-android-user-credentials-to-firebase-database-kotlin/). – Alex Mamo Jun 21 '21 at 16:03
  • I try `reference = firebaseDatabase.getReferenceFromUrl("https://chatapp-firebase-e294b-default-rtdb.europe-west1.firebasedatabase.app/").child(userid);` but i have error `com.google.firebase.database.DatabaseException: Invalid URL (https://chatapp-firebase-e294b-default-rtdb.europe-west1.firebasedatabase.app/) passed to getReference(). URL was expected to match configured Database URL: https://chatapp-firebase-e294b-default-rtdb.firebaseio.com` – LeoBe Jun 21 '21 at 16:04
  • That error message proves that your from your configuration the SDK tries to use the wrong URL. Did you try passing the URL to `getInstance` as I suggested, and Alex answered in the link he provided? – Frank van Puffelen Jun 21 '21 at 16:05

0 Answers0