Как загрузить изображение из базы данных Firebase и загрузить его в изображение в единстве - PullRequest
0 голосов
/ 27 декабря 2018

Я использую базу данных Firebase Realtime для обработки некоторых пользовательских интерфейсов в своем мобильном приложении Unity.Я сохраняю и извлекаю данные из своей базы данных без каких-либо проблем.Проблема возникает, когда я хочу загрузить изображение из Firebase Storage.Я сохранил URL-адреса и имена изображений на моем сервере, и теперь я пытаюсь создать префаб.Этот префаб содержит панель с текстом и изображением для каждого потомка Firebase.Структура изображения, которое я пытаюсь загрузить из своей базы данных, выглядит следующим образом:

enter image description here

Так что в моем коде я иду к ребенку "Byer",найдите имя и добавьте ключ, так как имя моего недавно созданного префаба работает нормально.Но когда я пытаюсь загрузить imageURL в изображение, у меня возникает проблема - мой код выглядит так:

DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
FirebaseDatabase.DefaultInstance.GetReference("Byer").ChildAdded += Handle_ChildAdded;


 void Handle_ChildAdded(object sender, ChildChangedEventArgs e)
    {
        if (e.Snapshot.Value != null)
        {
            var dict = e.Snapshot.Value as Dictionary<string, object>;


           Transform scrollViewObj = Instantiate(prefab, new Vector3(0, (downSize * Global.citiesCount) - firstY, 0), Quaternion.identity);
           scrollViewObj.transform.Find("Text").gameObject.GetComponent<Text>().text = e.Snapshot.Key;
               scrollViewObj.name = e.Snapshot.Key;

//HERE I TRY TO LOAD IMAGE FROM URL (This is my problem)
            string data_URL = dict["ImageURL"] as string;
            //Start coroutine to download image
            StartCoroutine(AccessURL(data_URL, scrollViewObj.transform.Find("Image").gameObject.GetComponent<Image>()));

                }
            }

//Function to download (This could might also be my problem)
      IEnumerator AccessURL(string url, Image img)
        {


        //Debug.Log("Accessing texture URL in database");
        using (WWW www = new WWW(url))
        {

            yield return www;
            Renderer r = GetComponent<Renderer>();
            r.material.mainTexture = www.texture;
            img.material.mainTexture = www.texture;
            Debug.Log("Texture URL: " + www.url);
        }
    }

Кто-нибудь может увидеть, что я делаю неправильно?

1 Ответ

0 голосов
/ 27 декабря 2018
  • Убедитесь, что вы импортировали FirebaseStorage.unitypackage
  • Вам понадобится StorageReference, а не DatabaseReference

    Firebase.Storage.StorageReference storageReference = 
       Firebase.Storage.FirebaseStorage.DefaultInstance.GetReferenceFromUrl("storage_url");
    
    storageReference.Child("resource_name").GetBytesAsync(1024*1024).
        ContinueWith((System.Threading.Tasks.Task<byte[]> task) =>
        {
            if (task.IsFaulted || task.IsCanceled)
            {
                Debug.Log(task.Exception.ToString());
            }
            else
            {
                byte[] fileContents = task.Result;
                Texture2D texture = new Texture2D(1, 1);
                texture.LoadImage(fileContents);
                //if you need sprite for SpriteRenderer or Image
                Sprite sprite = Sprite.Create(texture, new Rect(0.0f, 0.0f,texture.width, 
                texture.height), new Vector2(0.5f, 0.5f), 100.0f);
                Debug.Log("Finished downloading!");
            }
        });
    
  • storage_url: Найдено в разделе firebase-> storage.будет выглядеть примерно так: gs://project_name.appspot.com/

  • resource_name: имя ресурса, например image_name.png
...