使用Firebase在Unity中添加用户时出错
以下是我向Firebase数据库添加新注册用户的代码:使用Firebase在Unity中添加用户时出错,firebase,unity3d,firebase-realtime-database,unityscript,Firebase,Unity3d,Firebase Realtime Database,Unityscript,以下是我向Firebase数据库添加新注册用户的代码: TransactionResult AddUserToDatabaseTransaction(MutableData mutableData) { if (mutableData != null) { List<object> users = mutableData.Value as List<object>; if (users == null) {
TransactionResult AddUserToDatabaseTransaction(MutableData mutableData) {
if (mutableData != null)
{
List<object> users = mutableData.Value as List<object>;
if (users == null)
{ users = new List<object>();
}
users = new List<object>();
// Now we add the new score as a new entry that contains the email address and score.
Dictionary<string, object> newUserRegistration = new Dictionary<string, object>();
newUserRegistration["Dateofbirth"] = "22/03/1980";
newUserRegistration["Email"] = auth.CurrentUser.Email;
newUserRegistration["Full Name"] = "cool";
newUserRegistration["LastLoggedIn"] = "27/06/2017";
newUserRegistration["RegistrationDate"] = "26/04/2017";
users.Add(newUserRegistration);
// You must set the Value to indicate data at that location has changed.
mutableData.Value = users;
return TransactionResult.Success(mutableData);
}
else return TransactionResult.Abort();
}
public void AddUserToDatabase() {
DatabaseReference reference = FirebaseDatabase.DefaultInstance.GetReference("users");
DatabaseReference usersaddnow = reference.Child(auth.CurrentUser.UserId);
usersaddnow.RunTransaction(AddUserToDatabaseTransaction)
.ContinueWith(task => {
if (task.Exception != null) {
information.text +=task.Exception.ToString();
} else if (task.IsCompleted) {
information.text += " Transaction complete.";
}
}
);
}
TransactionResult AddUserToDatabaseTransaction(MutableData MutableData){
if(可变数据!=null)
{
列表用户=可变数据。值为列表;
如果(用户==null)
{users=新列表();
}
用户=新列表();
//现在,我们将新分数添加为包含电子邮件地址和分数的新条目。
Dictionary newUserRegistration=新字典();
新用户注册[“出生日期”]=“1980年3月22日”;
newUserRegistration[“Email”]=auth.CurrentUser.Email;
newUserRegistration[“全名”]=“酷”;
newUserRegistration[“LastLoggedIn”]=“2017年6月27日”;
newUserRegistration[“注册日期”]=“2017年4月26日”;
添加(newUserRegistration);
//必须设置该值以指示该位置的数据已更改。
mutableData.Value=用户;
返回TransactionResult.Success(可变数据);
}
else返回TransactionResult.Abort();
}
public void AddUserToDatabase(){
DatabaseReference=FirebaseDatabase.DefaultInstance.GetReference(“用户”);
DatabaseReference usersaddnow=reference.Child(auth.CurrentUser.UserId);
usersaddnow.RunTransaction(AddUserToDatabaseTransaction)
.ContinueWith(任务=>{
if(task.Exception!=null){
information.text+=task.Exception.ToString();
}else if(任务已完成){
information.text+=“交易完成。”;
}
}
);
}
以下是数据库的快照:
所以,我正在尝试向数据库添加一个用户。
我成功地添加了它们,正如您从图片中看到的,但它在用户详细信息之前添加了一个零子项。你能告诉我为什么会这样吗?
几个小时来我一直试图摆脱这个问题,但我找不到解决办法 问题在于arraylist 它通过自己的索引设置数据,如0,1等 因此,在unity中,它似乎默认使用这些索引 我可以访问测试和内部元素
以这种方式管理和访问数据更容易我不是Unity方面的专家,但从代码来看,您正在推送的用户数据(
users
)似乎类似于数组值(技术上是一个列表),其中包含一个字典。因此,从技术上讲,您正在将一个数组数据保存到Firebase,Firebase将以这种方式处理它。0
节点表示users
数组中的第一项。你能试着直接按一下字典吗?希望这能让我们干杯!谢谢你的回答。我不知道怎么做,但是我发布的代码是一个修改过的代码。原始版本在这里:。原始代码似乎添加了一个递增1的子级。我想不出哪个函数对子函数进行递增和相加。如果我这样做了,我可以修改它,让它直接添加信息,跳过子添加。。。。有人有什么想法吗?