【发布时间】:2023-03-21 21:39:01
【问题描述】:
我一直在尝试使用 weatherbit.io API 来访问我的 Android 应用程序中的 AQI 信息。脚本AqiInfoScript用于访问API,Update AQI脚本用于打印值。
AqiInfoScript:
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using SimpleJSON;
public class AqiInfoScript : MonoBehaviour
{
private float timer;
public float minutesBetweenUpdate;
private float latitude;
private float longitude;
private bool locationInitialized;
public static string cityName;
public static double currentAqi;
private readonly string baseWeatherbitURL = "https://api.weatherbit.io/v2.0/current/airquality?";
private readonly string key = "*********************";
public void Begin()
{
latitude = GPS.latitude;
longitude = GPS.longitude;
locationInitialized = true;
}
void Update()
{
if (locationInitialized)
{
if (timer <= 0)
{
StartCoroutine(GetAqi());
timer = minutesBetweenUpdate * 60;
}
else
{
timer -= Time.deltaTime;
}
}
}
private IEnumerator GetAqi()
{
string weatherbitURL = baseWeatherbitURL + "lat=" + latitude + "&lon=" + longitude + "&key="
+ key;
UnityWebRequest aqiInfoRequest = UnityWebRequest.Get(weatherbitURL);
yield return aqiInfoRequest.SendWebRequest();
//error
if (aqiInfoRequest.isNetworkError || aqiInfoRequest.isHttpError)
{
Debug.LogError(aqiInfoRequest.error);
yield break;
}
JSONNode aqiInfo = JSON.Parse(aqiInfoRequest.downloadHandler.text);
cityName = aqiInfo["city_name"];
currentAqi = aqiInfo["data"]["aqi"];
}
}
更新AQI 脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UpdateAQI : MonoBehaviour
{
public Text airquality;
//public Text coordinates;
private void Update()
{
airquality.text = "Current Aqi: " + AqiInfoScript.currentAqi.ToString();
}
}
电流输出:电流 AQI:0 期望输出:当前 AQI:129.0000
【问题讨论】:
-
你确定
Begin被调用了吗?在currentAqi = aqiInfo["data"]["aqi"];之后可以添加Debug.Log($"New data available: ${currentAqi}");吗?您是否也尝试过明确致电agiInfo["data"]["aqi"].AsDouble? ..你也不应该在这里发布真正的钥匙 -
一般来说,我不会在
Update中这样做,而是更多地由事件驱动。下载完成或失败后开始下一次下载。仅在收到新数据时才更新文本组件 -
1.
GPS脚本中已经存在 Begin 函数为aqiInfoScript.Begin();2。我添加了 Debug.Log 3。也显式调用了agiInfo["data"]["aqi"],并且它们都呈现与之前相同的结果 4。我很抱歉关键,我已经为此苦苦挣扎了好几天,我完全忘记了关键 5。关于您的第二个查询,我首先想确保在清理代码之前我实际上正在获取数据,但这甚至没有发生用最简单的程序:( -
但只是为了确保这意味着它与您的第二个脚本无关,但错误已经存在于您从 API 收到的数据中......您是否 100% 确定没有错字
currentAqi = aqiInfo["data"]["aqi"];的密钥?收到的 json 是否有完全匹配字段名称?你能告诉我们Debug.Log(aqiInfoRequest.downloadHandler.text);的输出吗? -
以下是weatherbit.io主页的链接,其中包含示例JSON文件
https://www.weatherbit.io/api/airquality-current#:~:text=This%20Air%20Quality%20API%20returns,(USA%20and%20EU%20only),我已经检查了一遍又一遍。aqi属于data类。没有匹配的字段名称。
标签: c# android api unity3d game-engine