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;
}
这是我的代码。
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;
}