Android Firebase - добавить аутентифицированного пользователя в базу данных - PullRequest
0 голосов
/ 02 мая 2018

Хорошо, я создаю приложение xamarin.android для Visual Studio, и вопросов такого типа довольно много, но я действительно ничего не нашел в отношении xamarin.android, все основано на Java. Я пытался следовать этим учебникам и ответам, но всегда было что-то не так или не работало на Xamarin android.

Я сделал аутентификацию, и она отлично работает, никаких проблем нет. И я попытался сохранить информацию о пользователе (информацию, которую пользователь вводит при регистрации) в базу данных. Это вроде сработало, но с одной проблемой. Вот код:

  public void OnComplete(Task task)
    {
        if (task.IsSuccessful)
        {
            Toast.MakeText(this, "Successful", ToastLength.Long).Show();

            FirebaseUser user = FirebaseAuth.GetInstance(app).CurrentUser;
            id = user.Uid;
            CreateUser();

            buttonSignIn.PerformClick();
            progressBar.Visibility = ViewStates.Invisible;
        }
        else
        {
     //something
        }
    }

А вот и CreateUser() метод:

  private void CreateUser ()
    {
        Account user = new Account();
        user.uid = id;
        user.name = signup_inputName;
        user.lastName = signup_inputLastName;
        user.email = signup_inputEmail;
        user.phone = signup_inputPhoneNumber;

        var firebase = new FirebaseClient(FirebaseURL);
        var item = firebase.Child("users").PostAsync<Account>(user);

    }

Вот код класса учетной записи:

public class Account
{
    public string uid      { get; set; }
    public string name     { get; set; }
    public string lastName { get; set; }
    public string email    { get; set; }
    public string phone    { get; set; }

}

Этот код хранит информацию о пользователе в узле "users" в базе данных. Но есть еще один узел под "user" с некоторым случайным значением и ниже информация о пользователе (включая uid). Вот вывод:

- Users   
      -LBGFtYFTfD3l1hmwHVn
          email:  "testuser@test.com"
          lastName:"peric"
          name:  "pero"
          phone: "12321"
          uid: "18puc5CzSZfzbdflzekzNCHGHR62"

Итак, мой вопрос: не должно ли это случайное значение ниже "users" узла быть uid? Если да, то как это установить? Я пробовал с этим:

Account user = new Account();
            user.uid = id;
            user.name = signup_inputName;
            user.lastName = signup_inputLastName;
            user.email = signup_inputEmail;
            user.phone = signup_inputPhoneNumber;

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").Child(uid).SetValue(user)

Но это не сработало, я получаю эту ошибку:

Firebase No properties to serialize found on class

Несмотря на то, что я установил публичные методы получения и установки в классе пользователей.

Мне нужно получить эту информацию о пользователе и показать ее в некоторых местах моего приложения, но я просто не могу заставить ее работать. Это мой первый раз, когда я использую Firebase, и я привык к базе данных SQL, так что это меня действительно смущает. Кроме того, в Интернете очень мало информации о xamarin.android и firebase, плюс я вообще новичок в программировании в целом. Любая помощь будет признательна. Это моя последняя попытка перед переходом на онлайн базу данных SQL.

1 Ответ

0 голосов
/ 02 мая 2018

Когда вы звоните PostAsync, клиент создает новый дочерний узел в том месте, где вы его вызываете. Это похоже на глагол HTTP POST и метод push() в большинстве других Firebase SDK.

Чтобы записать данные в указанное вами местоположение, используйте PutAsync:

var item = firebase.Child("users").Child(uid).PutAsync<Account>(user);

См. Пример в файле Readme из Firebase.Xamarin .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...