Kin*_*ire 3 c# multithreading json xamarin xamarin.forms
我正在编写一个与用户帐户一起使用的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);
}
Run Code Online (Sandbox Code Playgroud)
当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; }
}
Run Code Online (Sandbox Code Playgroud)
我也注意到以下错误打印出来,我试着用谷歌搜索并没有找到任何我理解的解决方案
解析正无穷大值时出错.路径'',第0行,第0位.
你得到的错误是一个JSON.net,并且在JSON反序列化期间发生,这意味着更新静态变量没有问题,因为代码永远不会到达那一点(它结束于此catch (Newtonsoft.Json.JsonReaderException readerExp)).
这很好地缩小了你的问题.您从服务器收到的响应很可能出现问题.在行上放置一个断点var jsonReader = ...并检查page_result变量的内容,看它们是否包含任何意外字符.您也可以将响应转储到JSON验证器中以确认它是否实际有效(https://jsonlint.com/)
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |