我正在编写一个使用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; }
}
我注意到以下错误信息,我尝试在谷歌上搜索并没有找到任何可以理解的解决方案来解决这个问题。
解析正无穷大值时出错。路径“”,行 0,位置 0。
Debug.WriteLine (exc)
): 这将为您提供整个异常堆栈跟踪,包括您的代码中出现错误的行:这将帮助您大大了解您的错误。 并且通常情况下,不要像您正在做的那样吞掉异常: 您的程序出现了错误,您只是将其写下并忽略它: 如果前一个方法未执行预期操作,您的程序该如何继续正常运行? - Gian Paolo