[英]Cannot display data from responsebody HttpClient get request
On my previous post, I have asked about getting data from Http Get Request with a body in C#.在我之前的帖子中,我询问了如何从 Http Get Request 中获取数据,其中正文为 C#。 Now I am facing another error,
Android.Util.AndroidRuntimeException: 'Only the original thread that created a view hierarchy can touch its views.'
现在我面临另一个错误,
Android.Util.AndroidRuntimeException: 'Only the original thread that created a view hierarchy can touch its views.'
Does anyone know how to resolve this issue?有谁知道如何解决这个问题?
Code代码
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("my url"),
Content = new StringContent("my json body content", Encoding.UTF8, "application/json"),
};
var response = await client.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responsebody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
string text = responsebody.ToString();
string[] str = text.Split(new[] { ',', ':' }, StringSplitOptions.RemoveEmptyEntries);
string result = str[10];
labelTxt.Text = result;
Try something like below (assuming this whole thing is a function called as " SomeFunction
")试试下面的东西(假设这整个事情是一个 function 称为“
SomeFunction
”)
private void SomeFunction() {
Device.BeginInvokeOnMainThread(() => {
var client = new HttpClient();
var request = new HttpRequestMessage {
Method = HttpMethod.Get,
RequestUri = new Uri("my url"),
Content = new StringContent("my json body content", Encoding.UTF8, "application/json"),
};
var response = await client.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responsebody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
string text = responsebody.ToString();
string[] str = text.Split(new [] {
',',
':'
}, StringSplitOptions.RemoveEmptyEntries);
string result = str[10];
labelTxt.Text = result;
});
}
Hi Please Try this Code.嗨,请试试这个代码。
public async static Task<T> GetResultAsync<T>(string Url)
{
try
{
if (CrossConnectivity.Current.IsConnected)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(BaseUrl);
client.DefaultRequestHeaders.Clear();
client.SetBearerToken(Helpers.Settings.ServiceToken);
client.DefaultRequestHeaders.Add("Language", Helpers.Settings.AppLanuageSetting);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync($"{Url}").ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(result,new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.None });
}
else
{
return default(T);
}
}
}
else
{
Acr.UserDialogs.UserDialogs.Instance.Toast("Please check your internet connection");
return default(T);
}
}
catch (Exception Ex)
{
Logging.ErrorLog(Ex, "GetResultAsync");
return default(T);
}
}
and use this method并使用这种方法
var results = await APIService.GetResultAsync>($"{ApiEndpoints}/{"Paramters1"}/{pageNo}"); var 结果 = 等待 APIService.GetResultAsync>($"{ApiEndpoints}/{"Paramters1"}/{pageNo}");
As curiousBoy said above, you can only modify UI elements from the UI thread(Main Thread).正如上面好奇的男孩所说,您只能从 UI 线程(主线程)修改 UI 元素。
so you could try to put labelTxt.Text = result;
所以你可以尝试把
labelTxt.Text = result;
inside Device.BeginInvokeOnMainThread
method.在
Device.BeginInvokeOnMainThread
方法中。
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("my url"),
Content = new StringContent("my json body content", Encoding.UTF8, "application/json"),
};
var response = await client.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responsebody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
string text = responsebody.ToString();
string[] str = text.Split(new[] { ',', ':' }, StringSplitOptions.RemoveEmptyEntries);
string result = str[10];
Device.BeginInvokeOnMainThread(() => {labelTxt.Text = result;});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.