【发布时间】:2019-10-14 00:40:48
【问题描述】:
我正在尝试在 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 控制台时,没有任何变化。
【问题讨论】:
-
只有在服务器上写入/拒绝数据后才会触发完成侦听器。您的设备是否连接到互联网/Firebase 服务器?
-
如果
!task.isSuccessful()会发生什么?我们看不到您的代码。 logcat 说什么? -
是的,它已连接到互联网并且可以在分析中检测到。对于不成功的部分,我有这个:```} else { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); mRegProgressBar.setVisibility(View.GONE); Toast.makeText(RegisterActivity.this, "不可能的 d'inscrire, veuillez ressayer!", Toast.LENGTH_LONG).show(); } ```
标签: android firebase-realtime-database