Firebaseデータベースに特定のキーがあるかどうかを確認する方法を理解しようとしています。私はXamarinとXamarin.Firebase.Databaseナゲットパッケージを使用しています。なんらかの理由で、このパッケージは他のバインディングと同様にXamarin Compenentsページには表示されないため、このパッケージ固有の例はありません。Xamarin.Firebase.Databaseを使用してFirebaseデータベースからデータを取得する
ユーザー名が既に使用されているかどうかを確認する必要があります。
EDIT:下記の新しいコードは、現在の回答に基づいています。
//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; }
}
は、誰もがこのパッケージを使用してこの作業を取得することができていますか?どんな助けもありがとうございます。
お返事ありがとうございます。あなたのコードに基づいて私の更新された質問を見てください。 – Tristan
@Tristan 'IValueEventListener.OnDataChange'で' not snap ** 'が存在するかどうかを判断しようとしている場合、 'snapshot.Key'があなたが要求しているものであり、' snapshot.ChildrenCount'が0に等しい。 – SushiHangover
ありがとうございます。やりますが、私はリスナーが解雇されているとは思わない。 OnChange関数の例外はスローされません – Tristan