【发布时间】:2018-06-15 18:43:29
【问题描述】:
我正在编写与用户帐户一起使用的 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);
}
打开网址后,会打印出以下行
{"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; }
}
我还注意到打印出以下错误,我尝试谷歌搜索并没有找到任何我理解的解决方案来解决这个问题
解析正无穷大值时出错。路径'',第 0 行,第 0 位置。
【问题讨论】:
-
而不是只写下异常的消息,转储整个异常 (
Debug.WriteLine (exc)):这将为您提供异常的整个堆栈跟踪,包括发生错误的代码行:这将帮助您了解您的错误。一般来说,不要吞下异常:您的程序有错误,您只需将其写下来并忽略它:如果以前的方法没有达到预期的效果,您如何程序正常进行? -
我试过了,找不到任何异常(调试控制台pastebin.com/hCU4BxVn)
标签: c# json multithreading xamarin xamarin.forms