加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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打开时,它打印出以下行

{“id”:7,”username”:”TestUser”,”name”:”Test User”,”bio”:”Hello World”,”private”:0}

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; }
}

我也注意到以下错误打印出来,我试着用谷歌搜索并没有找到任何我理解解决这个问题的解决方案

Error parsing positive infinity value. Path ”,line 0,position 0.

解决方法

你得到的错误是一个JSON.net并且在JSON反序列化期间发生,这意味着更新静态变量没有问题,因为代码永远不会到达那一点(它以catch结束(Newtonsoft.Json.JsonReaderException) readerExp)).

这很好地缩小了你的问题.您从服务器收到的响应很可能出现问题.在行var jsonReader = …上放置一个断点,并检查page_result变量的内容,看它们是否包含任何意外字符.您也可以将响应转储到JSON验证器中以确认它是否实际有效(https://jsonlint.com/)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读