setValue()在Firebase实时数据库中不起作用

时间:2019-10-13 15:34:53

标签: android firebase-realtime-database

我正在尝试在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 :(得分:0)

负责将活动从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();
                        }
                    }
                });

感谢评论者。