c# - 在获取 HTTP 请求后,对 JSON 的 LINQ 查询在移动设备上不会返回任何值,但在 Windows 上会返回
问题描述
我发送一个 HTTP 请求并接收一个 JSON。我在类结构中列出了 JSON 格式。Linq 查询此 json 并提交下一个场景的幂(变量)。
当我在 PC 上运行时,这适用于我的 Unity 编辑器。但是,当我在我的 Android 上构建和运行时,即使 HTTP 请求成功,它也不会从查询中返回任何值。
private void SendJson(string currPlayer)
{
string bodyJsonString = "{\"player_id\":\"" + currPlayer + "\"}";
string currURI = djangoApi + userOwnedMarbles;
StartCoroutine(PostRequestCoroutine(currURI, bodyJsonString));
}
private IEnumerator PostRequestCoroutine(string url, string json)
{
var jsonBinary = System.Text.Encoding.UTF8.GetBytes(json);
DownloadHandlerBuffer downloadHandlerBuffer = new DownloadHandlerBuffer();
UploadHandlerRaw uploadHandlerRaw = new UploadHandlerRaw(jsonBinary);
uploadHandlerRaw.contentType = "application/json";
UnityWebRequest www =
new UnityWebRequest(url, "POST", downloadHandlerBuffer, uploadHandlerRaw);
yield return www.SendWebRequest();
if (www.isNetworkError)
Debug.LogError(string.Format("{0}: {1}", www.url, www.error));
else
{
string test = string.Format("{0}", www.downloadHandler.text);
JObject myJson = JObject.Parse(test);
Debug.Log("welcome" + test);
var welcome2 = Welcome.FromJson(www.downloadHandler.text);
CurrPower.numberColorBombs = welcome2.Marbles.Count(n => n.Nickname.ToLower() == "Corkscrew Swirl".ToLower());
CurrPower.myPowerups[0] = CurrPower.numberColorBombs;
CurrPower.numberVerticalBombs = welcome2.Marbles.Count(n => n.Nickname.ToLower() == "Clearie".ToLower());
CurrPower.myPowerups[1] = CurrPower.numberVerticalBombs;
CurrPower.numberHorizontalBombs = welcome2.Marbles.Count(n => n.Nickname.ToLower() == "Cloud".ToLower());
CurrPower.myPowerups[2] = CurrPower.numberHorizontalBombs;
CurrPower.numberAdjacentBombs = welcome2.Marbles.Count(n => n.Nickname.ToLower() == "Onionskin".ToLower());
CurrPower.myPowerups[3] = CurrPower.numberAdjacentBombs;
CurrPower.numberSingleBombs = welcome2.Marbles.Count(n => n.Nickname.ToLower() == "Bullseye".ToLower());
CurrPower.myPowerups[4] = CurrPower.numberSingleBombs;
}
}
Welcome2
包含具有 json 对象的所有元素的部分类。Android不能很好地处理LINQ吗?
这AndroidLauncherManifest.xml
是我编辑过的文件
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning" android:label="@string/app_name" android:icon="@mipmap/app_icon" />
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</manifest>
解决方案
这是安卓设备的一个众所周知的问题。去年的谷歌更新使 9.0(pie) 或更高版本的安卓设备默认只接受来自所有应用程序的 HTTPS 请求。
您可以通过修改 XML 清单文件来解决此问题。这是您需要添加的内容:
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
注意其中一些标签可能已经存在,您只需要修改属性。如果您迷路了,可以查看此链接以获得更多解释
希望它有所帮助:)
推荐阅读
- php - 如何将一组自定义分类术语应用于可搜索的下拉列表?
- javascript - 为什么在 MVC Web 应用程序中会出现此 Javascript 错误?
- java - 如何从 DynamoDB 数据中以字符串形式获取价格
- bpmn - 有没有办法将 jar 连接到 flowable admin
- cocoa - 排除使用 NSTextView/UITextView 无法正确移动文本
- unix - 通过终端命令触发 Visual Studio 代码启动程序“开始调试”
- javascript - 使用 .reduce 时出现 UnhandledPromiseRejectionWarning
- math - 一般单调函数方程
- elisp - 不区分大小写的文本列表排序
- python - 使用 numpy 的任务