2017-03-10 113 views
0

未写入数据库的Firebase对象。 什么是错误。 。活动正在运行,但没有记录在Firebase数据库中写入的值。怎么办未写入数据库的Firebase对象

这是我的java文件

package com.shaan.homely; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Toast; 
import com.google.firebase.database.ChildEventListener; 
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.ValueEventListener; 
import com.shaan.homely.pojo.User; 

import java.util.HashMap; 
import java.util.Map; 

public class Empty extends AppCompatActivity { 

FirebaseDatabase firebaseDatabase; 
DatabaseReference myref; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_empty); 

    User user = new User("shaan","[email protected]","9718460374"); 
    myref = FirebaseDatabase.getInstance().getReference(); 

    String userId = myref.push().getKey(); 
    Map<String,User> data = new HashMap<String,User>(); 
    data.put(userId,user); 
    //Toast.makeText(getApplicationContext(),myref.toString(),Toast.LENGTH_LONG).show(); 
    // creating user object 
    myref.child("users").child(userId).setValue(data); 

    myref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      User user = dataSnapshot.getValue(User.class); 
      Toast.makeText(getApplicationContext(),user.getEmail()+user.getName(),Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show(); 
     } 
    }); 

    myref.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      User user = dataSnapshot.getValue(User.class); 
      Toast.makeText(getApplicationContext(),user.getEmail()+user.getName(),Toast.LENGTH_LONG).show(); 
     } 

     @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(DatabaseError databaseError) { 
      Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show(); 

     } 
    }); 

} 
} 

,这是我的用户类

package com.shaan.homely.pojo; 

import com.google.firebase.database.IgnoreExtraProperties; 

@IgnoreExtraProperties 
public class User { 

public String name; 
public String email; 
public String mobile; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getMobile() { 
    return mobile; 
} 

public void setMobile(String mobile) { 
    this.mobile = mobile; 
} 


// Default constructor required for calls to 
// DataSnapshot.getValue(User.class) 
public User() { 
} 

public User(String name, String email, String mobile) { 
    this.name = name; 
    this.email = email; 
    this.mobile = mobile; 
} 
} 
+0

检查'Firebase'规则,它通常有参数'“.WRITE” :“auth!= null”'。你可以将它定义为'“.write”:true'来未经授权地写入数据库。 –

+0

我已经定义了它.. –

回答

0

你推一个值根数据库,然后寻找它在孩子的用户”。您最初的参考必须指向孩子“用户”,要创建新条目:

myref = FirebaseDatabase.getInstance().getReference().child("users"); 

String userId = myref.push().getKey(); 
Map<String,User> data = new HashMap<String,User>(); 
data.put(userId,user); 
//Toast.makeText(getApplicationContext(),myref.toString(),Toast.LENGTH_LONG).show(); 
// creating user object 
myref.child(userId).setValue(data); 

UPDATE:

您也正在力推一个HashMap,但随后读取用户类。我建议你的ID添加到用户类,而不是创建HashMap中:

public class User { 
    ... 
    private String userId; 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 
} 

在您的代码:

String userId = myref.push().getKey(); 
user.setUserId(userId); 

// creating user object 
myref.child("users").child(userId).setValue(user); 
+0

你说了什么。 addValueEventListener返回Null时,我打印吐司值? –

+0

我更新了我的答案。 –

+0

仍然没有更新数据库这是我的firebase数据库快照https://ibb.co/nOiOmF –