c# - 从 Firebase 检索数据以创建带有按钮的滚动视图的问题
问题描述
我正在尝试使用从 Firebase 实时数据库中检索“titulo”字段的按钮创建一个滚动视图。我必须阅读 Firebase json,但在迭代时我无法在按钮中应用名称,并且滚动视图中没有出现任何按钮。
有人可以帮我吗?先感谢您。
这是我的代码:
FirebaseDatabase.DefaultInstance
.GetReference("Flash")
.GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.Log("Error al leer la Base de Datos de Firebase");
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
Debug.Log("Base de datos: " + snapshot.GetRawJsonValue());
foreach (DataSnapshot evento in snapshot.Children)
{
string titulo = (string)evento.Child("titulo").Value;
lat = float.Parse(evento.Child("lat").Value.ToString());
lon = float.Parse(evento.Child("lon").Value.ToString());
string descripcion = (string)evento.Child("descripcion").Value;
Debug.Log("Titulo: " + titulo);
Debug.Log("Latitud: " + lat);
Debug.Log("Longitud: " + lon);
Debug.Log("Descripcion: " + descripcion);
GameObject go = Instantiate(Button_Template) as GameObject;
go.SetActive(true);
BC_TButton_FLASH TB = go.GetComponent<BC_TButton_FLASH>();
TB.SetTitulo(titulo);
go.transform.SetParent(Button_Template.transform.parent);
go.transform.localScale = new Vector3(1, 1, 1);
}
}
});
和:
public class BC_TButton_FLASH : MonoBehaviour {
private string Titulo;
private float Lat;
private float Lon;
private string Descripcion;
public Text ButtonText_Titulo;
public BC_TData_WS_FLASH ScrollView;
public void SetTitulo(string titulo)
{
Titulo = titulo;
ButtonText_Titulo.text = titulo;
}
}
json是这样的:
{
"Flash" : [ {
"descripcion" : "aaaaa",
"lat" : 12.32145,
"lon" : 6.789,
"titulo" : "a1"
}, {
"descripcion" : "bbbbb",
"lat" : 21.41254,
"lon" : -2.4396,
"titulo" : "a2"
}, {
"descripcion" : "ccccc",
"lat" : 42.3434,
"lon" : 345345,
"titulo" : "a3"
} ]
}
解决方案
你的问题是多线程。
大多数 Unity API 只能在 Unity 主线程中使用。特别是任何立即需要或影响当前场景的东西(所以例外是纯数学结构,如使用Vector3
,Plane
等进行计算Quaternion
)
Task.ContinueWith
不继续在主线程中执行
创建一个在目标任务完成时异步执行的延续。
因此专门为 Unity Firebase 提供TaskExtentsions
了ContinueWithOnMainThread
返回一个在给定任务完成后完成的任务,并且从Unity的主线程调用给定的延续函数。
所以你应该使用
FirebaseDatabase.DefaultInstance
.GetReference("Flash")
.GetValueAsync().ContinueWithOnMainThread(task =>
{
...
推荐阅读
- asp.net - 如何防止对aspx页面的CSRF攻击?
- python - Python中用户类的序列化
- c - 将字符串从指针复制到指针数组中的索引
- python - 当我添加 csrf 中间件时,Django 导致 403 禁止错误
- php - PHP在嵌套的foreach内部中断时
- cmd - Winrar 命令行在不使用通配符时不删除递归
- node.js - 如何在同一个 Heroku 应用上部署 Front & Back node.js?
- express - 有没有办法在sails中间件中添加额外的参数?
- shibboleth - 单个 sp 连接 shibboleth SSO 中的多个 Idp
- typescript - 如何在 Typescript Enum 中查找具有值的键?