使用Xamarin.Firebase.Database从Firebase数据库检索数据

时间:2017-11-19 00:26:59

标签: xamarin firebase-realtime-database xamarin.android

我正在尝试弄清楚如何检查特定密钥是否在我的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; }
}

是否有人能够使用此套件并使其正常工作?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

假设您在Java(或基于Xamarin.Android的C#)中定义了POJO,其名为User,其中包含NameEmail属性以及{{ 1}} property是一个唯一的密钥。

调用以下内容会向Name密钥添加两个用户BarFoo

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