Как получить данные из Firebase в Unity3d через JSON? - PullRequest
1 голос
/ 03 октября 2019

Надеюсь, я проясню свой вопрос настолько, насколько это возможно. В основном

  • У меня есть список сотен элементов, сохраненных в моем FirebaseDatabse.

  • Я преобразую данные в JSON

  • Теперь я хочу использовать этот JSON и применить все данные к различным элементам в сцене единства

Я попытался прочитать все узлы / элементы в моей базе данных огнядочерний раздел, и я также объявил метод 'foreach', чтобы что-то делать с каждым потомком, с которым он сталкивается. Но это не работает, когда я хочу вызвать другой класс или функцию внутри метода 'foreach', и я понятия не имею, почему это не так!

Я действительно ценю любую помощь или идею для достижения этого. Если возможно, я хочу создать метод «foreach» и по-разному обрабатывать каждый элемент, поскольку ключ отличается, равно как и значение каждого элемента, присутствующего в JSON.


Player.Child(UserId).Child("User_Inventory").Child("Items").GetValueAsync().ContinueWith(task => {
            if (task.IsFaulted)
            {
                // Handle the error...
                Debug.LogError("Could not finish (LoadPlayerData) !!");
            }
            else if (task.IsCompleted)
            {
                DataSnapshot snapshot = task.Result;

                      // here is the data for all the items that I have

                    string JSON = snapshot.GetRawJsonValue();

               // Now How can I deal with each key/item present in the JSON?

       ```


[Обновить]

public void RetrieveData () {
Player.Child(UserId)
            .Child("User_Inventory").GetValueAsync().ContinueWith(task => {
            if (task.IsFaulted)
            {
                // Handle the error...
                Debug.LogError("Could not finish (LoadPlayerData) !!");
            }
            else if (task.IsCompleted)
            {
                DataSnapshot snapshot = task.Result;

                    foreach (DataSnapshot child in snapshot.Children)
                {
                   print(Child); // shows only one child's data when the  below 
                                 //line of code is present!!
                   DisplayInfo(Child.Key, (int)Child.Value);

                }
}});
}


public GameObject Item;
public GameObject Contents;
public void DisplayInfo(string Name, int quantity)
    {


        Item = Contents.transform.parent.Find(Name).GetComponent<QTY_UI>();
        Item.Qty = quantity;  // just passing quantity to another class



    }

1 Ответ

0 голосов
/ 03 октября 2019

Вместо того, чтобы преобразовывать свои данные в базе данных FireJSon в RawJson и пытаться выполнить итерацию объекта JSON, вы можете выполнять итерацию непосредственно по дочерним объектам снимка. Вы можете перебирать детей детей таким же образом.

if(task.IsCompleted)
{
    DataSnapshot snapshot = task.Result;
    foreach (DataSnapshot child in snapshot.Children)
    {
        string key = child.Key;
        string value = child.Value;
        //Process child here.
    }
}

Обновление:

Попробуйте сделать так, чтобы ваши дети находились в более управляемом формате

Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (DataSnapshot child in snapshot.Children)
{
    dict.Add(child.Key, child.Value);
}
//dict now contains all of your json children as a dictionary reference.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...