c# – 如何从线程内更新字符串值
发布时间:2020-12-15 23:41:50 所属栏目:百科 来源:网络整理
导读:我正在编写一个与用户帐户一起使用的Xamarin.Forms跨平台应用程序.问题是我从我的数据库中获取了他们的用户名,但它并没有更新public static string username =“”的值. 我假设它是因为它是在一个线程内运行或与WebRequest有关,我已经做了一段时间的安静研究
我正在编写一个与用户帐户一起使用的Xamarin.Forms跨平台应用程序.问题是我从我的数据库中获取了他们的用户名,但它并没有更新public static string username =“”的值.
我假设它是因为它是在一个线程内运行或与WebRequest有关,我已经做了一段时间的安静研究,但一直无法找到解决方案. 我用来更新用户名的方法如下 private void loadUserData() { username = "Test"; Uri uri = new Uri("http://example.com/session-data.php?session_id=" + session); WebRequest request = WebRequest.Create(uri); request.BeginGetResponse((result) => { try { Stream stream = request.EndGetResponse(result).GetResponseStream(); StreamReader reader = new StreamReader(stream); Device.BeginInvokeOnMainThread(() => { string page_result = reader.ReadToEnd(); var jsonReader = new JsonTextReader(new StringReader(page_result)) { SupportMultipleContent = true // This is important! }; var jsonSerializer = new JsonSerializer(); try { while (jsonReader.Read()) { UserData userData = jsonSerializer.Deserialize<UserData>(jsonReader); username = userData.username; } } catch (Newtonsoft.Json.JsonReaderException readerExp) { string rEx = readerExp.Message; Debug.WriteLine(rEx); } }); } catch (Exception exc) { string ex = exc.Message; Debug.WriteLine(ex); } },null); } 当URL打开时,它打印出以下行
UserData包含以下代码 class UserData { [JsonProperty("id")] public int id { get; set; } [JsonProperty("username")] public string username { get; set; } [JsonProperty("name")] public string name { get; set; } [JsonProperty("bio")] public string bio { get; set; } [JsonProperty("private")] public int isPrivate { get; set; } } 我也注意到以下错误打印出来,我试着用谷歌搜索并没有找到任何我理解解决这个问题的解决方案
解决方法
你得到的错误是一个JSON.net并且在JSON反序列化期间发生,这意味着更新静态变量没有问题,因为代码永远不会到达那一点(它以catch结束(Newtonsoft.Json.JsonReaderException) readerExp)).
这很好地缩小了你的问题.您从服务器收到的响应很可能出现问题.在行var jsonReader = …上放置一个断点,并检查page_result变量的内容,看它们是否包含任何意外字符.您也可以将响应转储到JSON验证器中以确认它是否实际有效(https://jsonlint.com/) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |