Unity3D Website look up returns nil in Unity3D 4.7.2

Unity3D Website look up returns nil in Unity3D 4.7.2

这是我的代码。

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://itunes.apple.com/lookup?id=1218822890");
        request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

        using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using(Stream stream = response.GetResponseStream())
                using(StreamReader reader = new StreamReader(stream))
        {
            string textRead = reader.ReadToEnd();

            Debug.Log("\nData Read = "); Debug.Log(textRead);
        }

我尝试从统一代码读取游戏网站 link 并读取应用价格。它 returns 没有...调用有什么问题吗?

您应该统一使用 WWW 或新的 UnityWebRequest 类 来阅读来自互联网的链接。 HttpWebRequest 将在大多数平台上运行,但在 WebPlayer 或 WebGL 等平台上会失败,因为 javascript 无法访问 IP 套接字。

这是一个改编自 Documentation

的示例
public class ExampleClass : MonoBehaviour
{
    public string url = "http://itunes.apple.com/lookup?id=1218822890";
    IEnumerator Start()
    {
        using (WWW www = new WWW(url))
        {
            yield return www;
            string textRead = www.text;
            // ...
        }
    }
}

您的代码没有问题并且工作正常。它没有返回 null。 您认为它正在返回 null,因为您收到的数据中包含 \n\n,使得 json 在下面的几行中开始。要实际查看数据,您必须在“控制台”选项卡中向下滚动一点或重新调整下方圆圈中水平线的大小。

尽管在 Unity 中使用 UnityWebRequest 更好,但 HttpWebRequest 应该也可以。要回答您的 other 问题,下载数据后,使用 JsonUtility.FromJson 将其反序列化为一个对象,然后您就可以访问价格。

下面是该函数在 C# 中的样子:

void Start()
{
    StartCoroutine(CheckForPaidApp("http://itunes.apple.com/lookup?id=1218822890")); ;
}


IEnumerator CheckForPaidApp(string uri)
{
    UnityWebRequest uwr = UnityWebRequest.Get(uri);
    yield return uwr.SendWebRequest();

    if (uwr.isHttpError || uwr.isNetworkError)
    {
        Debug.Log("Error While Sending: " + uwr.error);
    }
    else
    {
        string data = uwr.downloadHandler.text;
        Debug.Log("Received: " + uwr.downloadHandler.text);

        //Serialize to Json
        RootObject jsonObj = JsonUtility.FromJson<RootObject>(data);
        List<Result> resultObj = jsonObj.results;

        //Loop over the result and show the price information
        for (int i = 0; i < resultObj.Count; i++)
        {
            double price = resultObj[i].price;
            Debug.Log("Price = \n" + price);

            if (price > 0.0f)
            {
                Debug.Log("Its Paid App\n");
            }
            else
            {
                // show ads here
            }
        }
    }
}

Objects/classes反序列化json成:

[Serializable]
public class Result
{
    public List<string> screenshotUrls;
    public List<string> ipadScreenshotUrls;
    public List<object> appletvScreenshotUrls;
    public string artworkUrl512;
    public string artworkUrl60;
    public string artworkUrl100;
    public string artistViewUrl;
    public List<string> supportedDevices;
    public string kind;
    public List<string> features;
    public bool isGameCenterEnabled;
    public List<object> advisories;
    public string fileSizeBytes;
    public List<string> languageCodesISO2A;
    public string trackContentRating;
    public string trackViewUrl;
    public string contentAdvisoryRating;
    public string trackCensoredName;
    public List<string> genreIds;
    public int trackId;
    public string trackName;
    public string primaryGenreName;
    public int primaryGenreId;
    public string currency;
    public string wrapperType;
    public string version;
    public int artistId;
    public string artistName;
    public List<string> genres;
    public double price;
    public string description;
    public string bundleId;
    public string sellerName;
    public bool isVppDeviceBasedLicensingEnabled;
    public DateTime releaseDate;
    public DateTime currentVersionReleaseDate;
    public string minimumOsVersion;
    public string formattedPrice;
}

[Serializable]
public class RootObject
{
    public int resultCount;
    public List<Result> results;
}