2
votes

I am making an android application. I first login the user with email and password and then in OnComplete method,if the task is successful, I am trying to access data on the database. But every time I get the message Listen at / failed.

My Main Activity code is as follows -

private FirebaseAuth auth;
private EditText inputEmail, inputPassword;
private Button btnLogin;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Firebase.setAndroidContext(this);
    //Get Firebase auth instance
    auth = FirebaseAuth.getInstance();

    if (auth.getCurrentUser() != null) {
        startActivity(new Intent(MainActivity.this, MainActivity.class));
        finish();
    }

    setContentView(R.layout.activity_main);
    inputEmail = (EditText) findViewById(R.id.txtMobile);
    inputPassword = (EditText) findViewById(R.id.txtPassword);
    btnLogin = (Button) findViewById(R.id.btnLogin);

    auth = FirebaseAuth.getInstance();


    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = inputEmail.getText().toString();
            final String password = inputPassword.getText().toString();


            //authenticate user
            auth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            // If sign in fails, display a message to the user. If sign in succeeds
                            // the auth state listener will be notified and logic to handle the
                            // signed in user can be handled in the listener.
                            if (!task.isSuccessful()) {
                                // there was an error
                                Log.e("Invalid","Invalid");

                            } else {
                                /*Intent intent = new Intent(MainActivity.this, Second.class);
                                startActivity(intent);
                                finish();*/
                                Firebase.getDefaultConfig();

                                auth = FirebaseAuth.getInstance();

                                if (auth.getCurrentUser() != null) {
                                    Log.e("awesome",auth.getCurrentUser().getEmail());
                                }

                                Firebase firebase = new Firebase("https://test-fd3f2.firebaseio.com");
                                firebase.addChildEventListener(new ChildEventListener() {
                                    // Retrieve new posts as they are added to Firebase
                                    @SuppressWarnings("unchecked")
                                    @Override
                                    public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
                                        if(snapshot.getValue()!= null) {
                                            String mobileNum = snapshot.getValue().toString();
                                            Log.e("here", mobileNum);
                                        }
                                        //Log.e("Title: ",newPost.get("password").toString());
                                    }

                                    @Override
                                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                                    }

                                    @Override
                                    public void onChildRemoved(DataSnapshot dataSnapshot) {

                                    }

                                    @Override
                                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                                    }

                                    @Override
                                    public void onCancelled(FirebaseError firebaseError) {
                                        Log.e("Cancel",firebaseError.getCode()+"");
                                        Log.e("Cancel",firebaseError.getDetails());
                                        Log.e("Cancel",firebaseError.getMessage());
                                    }
                                    //... ChildEventListener also defines onChildChanged, onChildRemoved,
                                    //    onChildMoved and onCanceled, covered in later sections.
                                });
                            }
                        }
                    });
        }
    });


}

UPDATE - My firebase rules is as follows-

        {
         "rules": {
         ".read": "auth != null",
         ".write": "auth != null"
          }
         }
1
What's the error exactly? - Danieboy
" W/SyncTree: Listen at / failed: FirebaseError: Permission denied " is the exact error. I am not able to read any data from the database. - Ambuj Kathotiya
I am using the rule to show data only when auth != null. After login I can get the logged in user email but still it shows permission denied. - Ambuj Kathotiya
Maybe see if this thread helps. stackoverflow.com/questions/37477644/… - Danieboy
This will definitely work but I don't want anybody to read the data that is why I want to authenticate first. - Ambuj Kathotiya

1 Answers

7
votes

You're mixing different Firebase SDKs:

  • auth.signInWithEmailAndPassword() is from the new 3.x/9.x Firebase SDK
  • new Firebase() is from the Firebase 2.x SDK

Signing in to the new SDK, will not authenticate the connection to the database made with the older SDK version. So your database connection is still unauthenticated.

The solution is to use a single version (9.x) for all Firebase libraries in your build.gradle file