我正在尝试弄清楚如何检查特定密钥是否在我的Firebase数据库中。我正在使用Xamarin和Xamarin.Firebase.Database nuget包。由于某些原因,此软件包未在Xamarin Compenents页面上列出,就像其他绑定一样,因此我找不到特定于此软件包的示例。
我想检查是否已经使用了用户名。
编辑:以下基于当前答案的新代码。
//Database instance
DatabaseReference oRoot = FirebaseDatabase.Instance.Reference.Root;
DatabaseReference oUsernamesRef = oRoot.Child("usernames");
//Username isn't taken
var userListener = new UserValueEventListener((sender, e) =>
{
bool result = (e as UserEventArgs).value;
if (result)
{
lstErrors.Add("The username you selected already exists. Please choose a different one.");
txtUsername.Background = GetDrawable(Resource.Drawable.edittext_modified_states_error);
}
}, sUsername);
oUsernamesRef.OrderByChild("username").EqualTo(sUsername).AddListenerForSingleValueEvent(userListener);
oUsernamesRef.OrderByChild(txtUsername.Text.ToLower()).EqualTo(txtUsername.Text.ToLower()).AddListenerForSingleValueEvent(oListener);
监听器:
public class UserValueEventListener : Java.Lang.Object, IValueEventListener
{
EventHandler OnChange;
string Username;
public UserValueEventListener(EventHandler OnChange, string Username)
{
this.OnChange = OnChange;
this.Username = Username;
}
public void OnCancelled(DatabaseError error)
{
//
}
public void OnDataChange(DataSnapshot snapshot)
{
throw new Exception("here.");
if (OnChange != null && snapshot.Value != null && snapshot.HasChild(Username))
{
OnChange.Invoke(this, new UserEventArgs(true));
}
}
}
事件
public class UserEventArgs : EventArgs
{
public UserEventArgs(bool value)
{
this.value = value;
}
public bool value { get; set; }
}
是否有人能够使用此套件并使其正常工作?任何帮助表示赞赏。
答案 0 :(得分:0)
假设您在Java(或基于Xamarin.Android的C#)中定义了POJO
,其名为User
,其中包含Name
和Email
属性以及{{ 1}} property是一个唯一的密钥。
调用以下内容会向Name
密钥添加两个用户Bar
和Foo
:
usernames
您可以稍后使用var userNamesRef = FirebaseDatabase.GetInstance(firebaseURL).GetReference(User.UserNameRoot);
var userSendToFirebase = new User("Bar", "bar@example.com");
var userRef = userNamesRef.Child(userSendToFirebase.Name);
userRef.SetValue(userSendToFirebase);
userSendToFirebase = new User("Foo", "foo@example.com");
userRef = userNamesRef.Child(userSendToFirebase.Name);
userRef.SetValue(userSendToFirebase);
查询Bar
用户,以便一次性读取数据:
AddListenerForSingleValueEvent
正在使用的基于var userNamesRef = FirebaseDatabase.GetInstance(firebaseURL).GetReference(User.UserNameRoot);
var userListener = new UserValueEventListener((sender, e) =>
{
var userFromFirebase = (e as UserEventArgs).Value as User;
Log.Debug(App.TAG, $"User Found!: {userFromFirebase.Name} : {userFromFirebase.Email}");
});
userNamesRef.OrderByChild("name").EqualTo("Bar").AddListenerForSingleValueEvent(userListener);
的侦听器是:
IValueEventListener