setValue () не работает в базе данных реального времени firebase - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь создать новые данные в базе данных Firebase в реальном времени. Я пытался использовать HashMap и объект, но ни один из них не работает. даже когда я помещаю прослушиватели OnComplete / OnSuccess / OnFailure, я не получаю никаких данных в журнале.

private void registerUser(final String displayName, String email, String password) {
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            FirebaseUser currentUser = mAuth.getCurrentUser();
                            String uid = currentUser.getUid();
                            HashMap<String, String> userMap = new HashMap<>();
                            User user = new User(displayName, "Bonjour!", "par defaut", "def");
                            userMap.put("name", displayName);
                            userMap.put("status", "Bonjour!_Je_viens_de_m'inscirire");
                            userMap.put("image", "par_defaut");
                            userMap.put("thumb_image", "def");
                            Log.d(TAG, "onComplete: " + userMap);
                            Log.d(TAG, "onComplete: " + user);
                            mDatabaseReference = FirebaseDatabase.getInstance().getReference("Users").child(uid);
                            mDatabaseReference.setValue(user)
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void aVoid) {
                                            Log.d(TAG, "onSuccess: ");
                                        }
                                    })
                                    .addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull Exception e) {
                                            Log.d(TAG, "onFailure: " + e.getMessage());
                                        }
                                    });
                            Log.d(TAG, "onComplete: " + mDatabaseReference);
mRegProgressBar.setVisibility(View.GONE);
                            Intent maintIntent = new Intent(RegisterActivity.this, MainActivity.class);
                            maintIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(maintIntent);
                            finish();

                        } else {
                            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
                            mRegProgressBar.setVisibility(View.GONE);
                            Toast.makeText(RegisterActivity.this, "impossible d'inscrire, veuillez ressayer!", Toast.LENGTH_LONG).show();
                        }

Я пытался добавить этот код, и он выдает: «не подключен» в журнале.

//check if connected
                            DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
                            connectedRef.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot snapshot) {
                                    boolean connected = snapshot.getValue(Boolean.class);
                                    if (connected) {
                                        Log.d(TAG, "connected");
                                    } else {
                                        Log.d(TAG, "not connected");
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError error) {
                                    Log.w(TAG, "Listener was cancelled");
                                }
                            });

HashMap содержит фактические данные, но метод setValue () по какой-то причине не работает. Когда я смотрю в консоль Firebase нет никаких изменений.

1 Ответ

0 голосов
/ 13 октября 2019

код, отвечающий за изменение активности с RegisterActivity на MainActivity, выполнялся до того, как он действительно смог отправить данные в базу данных. Чтобы решить проблему, я просто поместил часть кода, отвечающую за изменение активности, и все такое:

mRegProgressBar.setVisibility(View.GONE);
                            Intent maintIntent = new Intent(RegisterActivity.this, MainActivity.class);
                            maintIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(maintIntent);
                            finish();

внутри OnSuccessListener. итоговый код:

private void registerUser(final String displayName, String email, String password) {
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            FirebaseUser currentUser = mAuth.getCurrentUser();
                            String uid = currentUser.getUid();
                            HashMap<String, String> userMap = new HashMap<>();
                            userMap.put("name", displayName);
                            userMap.put("status", "Bonjour!_Je_viens_de_m'inscirire");
                            userMap.put("image", "par_defaut");
                            userMap.put("thumb_image", "def");
                            mDatabaseReference = mDatabase.getReference("Users").child(uid);
                            mDatabaseReference.setValue(userMap)
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void aVoid) {
                                            Log.d(TAG, "onSuccess: ");
                                            mRegProgressBar.setVisibility(View.GONE);
                                            Intent maintIntent = new Intent(RegisterActivity.this, MainActivity.class);
                                            maintIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                            startActivity(maintIntent);
                                            finish();
                                        }
                                    })
                                    .addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull Exception e) {
                                            Log.d(TAG, "onFailure: " + e.getMessage());
                                        }
                                    });
                        } else {
                            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
                            mRegProgressBar.setVisibility(View.GONE);
                            Toast.makeText(RegisterActivity.this, "impossible d'inscrire, veuillez ressayer!", Toast.LENGTH_LONG).show();
                        }
                    }
                });

спасибо за комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...